// imgbbs.php release 3 Copyright 2006 TAKEDA Hiroyuki
// http://atashi.net/inu/ja/software/imgbbs.html
// 詳しくは config.php を見てください。
// --- 設定ファイル読み込み ----------------------------------------------------
require( 'config.php' );
// --- 初期化 ------------------------------------------------------------------
$release = '3.1';
$tmp_file = $tmp_dir . uniqid( '' );
// --- captcha.phpに渡す文字列をRC4で暗号化してURLエンコード -------------------
if ( $captcha ) {
require( 'rc4.php' );
$rc4 = new Crypt_RC4;
$rc4->setkey( $key );
$auth = (string)rand( 1000, 9999 );
$rc4->crypt( $auth );
$auth = urlencode( $auth );
}
// --- 書き込み処理 ------------------------------------------------------------
if ( $_POST['act'] == 'new' or $_POST['act'] == 'rep' ) {
// --- エラー処理 ----------------------------------------------------------
//if ( $_POST['name'] == '' ) error( '名前が入力されていません' );
//if ( $_POST['subject'] == '' ) error( '件名が入力されていません' );
//if ( $_POST['delkey'] == '' ) error( '削除キーが入力されていません' );
if ( $_POST['delkey'] == '' ) $_POST['delkey'] = time();
// --- クッキー処理 --------------------------------------------------------
if ( $_POST['cookie'] == 'keep' ) {
setcookie( 'name', $_POST['name'], time() + 365 * 24 * 3600 );
setcookie( 'email', $_POST['email'], time() + 365 * 24 * 3600 );
$_COOKIE['name'] = $_POST['name'];
$_COOKIE['email'] = $_POST['email'];
} else {
setcookie( 'name' );
setcookie( 'email' );
$_COOKIE['name'] = '';
$_COOKIE['email'] = '';
}
// --- CAPTCHA -------------------------------------------------------------
if ( $captcha ) {
$charenge1 = urldecode( $_POST['charenge1'] );
$charenge2 = urldecode( $_POST['charenge2'] );
$rc4 = new Crypt_RC4;
$rc4->setkey( $key );
$charenge3 = $rc4->decrypt( $charenge1 );
if ( $charenge1 != $charenge2 ) error( 'CAPTCHAテストに失敗しました' );
}
// --- バックアップファイル作成 --------------------------------------------
if ( $backup ) if ( ! copy( $log_file, $backup_file ) ) error( 'バックアップファイルの作成に失敗しました' );
// --- 投稿IDの確保とテンポラリファイル名の生成 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
$time = time();
// --- ファイルアップロード ------------------------------------------------
if ( $_FILES['file']['size'] != 0 ) {
$path_parts = pathinfo( $_FILES['file']['name'] );
$file_url = $img_dir . $time . '.' . strtolower( $path_parts['extension'] );
copy( $_FILES['file']['tmp_name'], $file_url );
}
// 書き込み → 投稿ID<>親投稿ID<>ファイルへのURL<>削除キー<>名前<>メールアドレス<>リモートホスト<>表示用時間<>件名<>本文
$line = '';
$line .= $time . '<>';
$line .= $_POST['parent'] . '<>';
$line .= $file_url . '<>';
$line .= md5( $_POST['delkey'] ) . '<>';
$line .= htmlspecialchars( $_POST['name'] ) . '<>';
$line .= htmlspecialchars( $_POST['email'] ) . '<>';
$line .= $_SERVER['REMOTE_HOST'] . '<>';
$line .= date( 'Y年m月d日H時i分s秒', time() + $time_diff * 3600 ) . '<>';
$line .= ereg_replace( "\r\n|\r|\n", '
', htmlspecialchars( $_POST['subject'] ) ) . '<>';
$line .= ereg_replace( "\r\n|\r|\n", '
', htmlspecialchars( $_POST['body'] ) );
$line .= "\n";
if ( $_POST['act'] == 'new' ) {
// --- 新規書き込み ----------------------------------------------------
if ( ! $fd_tmp = fopen( $tmp_file, 'a' ) ) error( 'テンポラリファイルのオープンに失敗しました' );
if ( fwrite( $fd_tmp, $line ) == FALSE ) error( 'ログファイルの書き込みに失敗しました' );
if ( ! $fd_log = fopen( $log_file, 'r' ) ) error( 'ログファイルのオープンに失敗しました' );
while ( ( $line = fgets( $fd_log, 8192 ) ) != FALSE ) fwrite( $fd_tmp, $line );
fclose( $fd_tmp );
fclose( $fd_log );
if ( ! rename( $tmp_file, $log_file ) ) error( 'ファイル名の変更に失敗しました' );
} else {
// --- 返信 ------------------------------------------------------------
if ( ! $fd_log = fopen( $log_file, 'r' ) ) error( 'ログファイルのオープンに失敗しました' );
if ( ! $fd_tmp = fopen( $tmp_file, 'w' ) ) error( 'テンポラリファイルのオープンに失敗しました' );
while ( ( $line2 = fgets( $fd_log, 8192 ) ) != FALSE ) {
list( $post_id, $parent, $file_url, $delkey, $name, $email, $remote_host, $date, $subject, $body ) = explode( '<>', $line2 );
if ( $post_id == $_POST['parent'] ) if ( fwrite( $fd_tmp, $line2 ) == FALSE ) error( 'テンポラリファイルへの書き込みに失敗しました' );
if ( $parent == $_POST['parent'] ) if ( fwrite( $fd_tmp, $line2 ) == FALSE ) error( 'テンポラリファイルへの書き込みに失敗しました' );
}
// 投稿された記事の書き込み
if ( fwrite( $fd_tmp, $line ) == FALSE ) error( 'テンポラリファイルへの書き込みに失敗しました' );
fclose( $fd_tmp );
fclose( $fd_log );
if ( ! $fd_log = fopen( $log_file, 'r' ) ) error( 'ログファイルのオープンに失敗しました' );
if ( ! $fd_tmp = fopen( $tmp_file, 'a' ) ) error( 'テンポラリファイルのオープンに失敗しました' );
while ( ( $line = fgets( $fd_log, 8192 ) ) != FALSE ) {
list( $post_id, $parent, $file_url, $delkey, $name, $email, $remote_host, $date, $subject, $body ) = explode( '<>', $line );
if ( $post_id == $_POST['parent'] ) continue;
if ( $parent == $_POST['parent'] ) continue;
fwrite( $fd_tmp, $line );
}
fclose( $fd_tmp );
fclose( $fd_log );
if ( ! rename( $tmp_file, $log_file ) ) error( 'ファイル名の変更に失敗しました' );
if ( ! chmod( $log_file, 0666 ) ) error( 'ログファイルのパーミッションの変更に失敗しました' );
}
// --- RSSファイルの作成 ---------------------------------------------------
mkrss();
}
// --- 削除処理 ----------------------------------------------------------------
if ( $_POST['act'] == 'del' ) {
if ( $backup ) if ( ! copy( $log_file, $backup_file ) ) error( 'バックアップファイルの作成に失敗しました' );
if ( $_POST['delkey'] == '' ) $_POST['delkey'] = time();
if ( ! $fd_log = fopen( $log_file, 'r' ) ) error( 'ログファイルのオープンに失敗しました' );
if ( ! $fd_tmp = fopen( $tmp_file, 'w' ) ) error( 'テンポラリファイルのオープンに失敗しました' );
$flag = TRUE;
while ( ( $line = fgets( $fd_log, 8192 ) ) != FALSE ) {
list( $post_id, $parent, $file_url, $delkey, $name, $email, $remote_host, $date, $subject, $body ) = explode( '<>', $line );
foreach ( $_POST['post_id'] as $value ) {
if ( ( $post_id == $value or $parent == $value ) and $delkey == md5( $_POST['delkey'] ) ) $flag = FALSE; else $flag = TRUE;
if ( ( $post_id == $value or $parent == $value ) and $passwd == $_POST['delkey'] ) $flag = FALSE; else $flag = TRUE;
}
if ( $flag ) fwrite( $fd_tmp, $line );
}
fclose( $fd_tmp );
fclose( $fd_log );
if ( ! rename( $tmp_file, $log_file ) ) error( 'ファイル名の変更に失敗しました' );
if ( ! chmod( $log_file, 0666 ) ) error( 'ログファイルのパーミッションの変更に失敗しました' );
// RSSファイルの作成
mkrss();
}
// --- 返信フォーム出力 --------------------------------------------------------
if ( $_GET['act'] == 'rep' ) { ?>
\n";
echo "$subject \n"; echo "投稿日 $date 投稿者 $name [$remote_host]\n"; echo " $body \n";
echo " |
\n";
echo "$subject \n"; echo "投稿日 $date 投稿者 $name [$remote_host]\n"; echo " $body \n";
echo " |
\n";
echo "\n";
echo "$subject \n"; echo "投稿日 $date 投稿者 $name [$remote_host] $reply_link\n"; echo " $body \n";
echo " |
削除キー | 新着順 → 0 | if ( $page >= $rows ) { $prev = $page - $rows; ?> } ?> if ( $n >= $rows ) { $next = $page + $rows; ?> } ?>