// minibbs.php release 4 Copyright 2006 TAKEDA Hiroyuki
// http://atashi.net/inu/ja/software/minibbs.html
// --- [基本仕様] --------------------------------------------------------------
// PHPで書かれています
// UTF-8で書かれています
// METHOD="POST"専用です
// http://captcha.jpのCAPTCHAサービスに対応しています
// RSS配信対応です
//
// --- [設置方法] --------------------------------------------------------------
// PHPが実行可能なサーバで、以下のファイルを設置します。
// 括弧内の数字はパーミッションの値です。
//
// /public_html/(任意のディレクトリ)
// |-- minibbs.php (644 or 604)
// |-- /tmp/ (777 or 707)
// |-- /data/ (777 or 707)
// | |-- log.txt(666 or 606)
//
// (CAPTCHAを使うなら)
// |-- des.php (644 or 604)
// (RDFを配信するなら)
// |-- minibbs.rdf (644 or 604)
//
// minibbs.php
// 最低限管理者パスワードの$passwdと、このファイルへのURL $reload_url、
// 画面の「終了」ボタンのリンク先の $return_urlを変更してください。
// CAPTCHAを使うのであれば$captchaをTRUEにし、$keyを設定してください。
//
// data/
// フォルダを作成し、パーミッションを777あたりに設定してください。
// このフォルダにログファイルが生成されます。
//
// data/log.txt
// ログファイルです。パーミッションを666あたりにします。
//
// tmp/
// テンポラリフォルダです。これを作らず /tmp 辺りにしてもいいかもしれません。
//
// des.php
// CAPTCHAを使うのであれば、このファイルをアップロードしてください。
//
// 以上が必要最低限の設定です。ここまでできたらサーバへ転送します。
// サーバにファイルを転送したら、それぞれのファイルを指定されたパーミッションに設定します。
//
// これで動作に最低必要な作業は終了です。ブラウザで見てみてください。
//
// --- [運用] ------------------------------------------------------------------
// 投稿記事を削除する場合は、投稿時に指定した削除キーを入力して、
// 削除したい記事をチェックすれば削除できます。
// 管理者パスワードは、各記事の削除キーの代わりになり、
// すべての記事の削除が可能となります。
//
// --- [履歴] ------------------------------------------------------------------
// 2006-10-06 release 4 http://captcha.jpのサービス専用にして、DESで暗号化
// 2006-04-10 release 3 http://captcha.jpのサービスに対応したり
// 2006-04-04 release 2 RSSを作成するようにした
// 2006-03-31 release 1 自分の好みに合う掲示板がないので作った。PHPでUTF-8でCAPTCHA対応のもの
//
// --- 設定部 ------------------------------------------------------------------
// --- 必ず書き換える項目 ------------------------------------------------------
// 管理者パスワード
$passwd = '3030';
// このファイルへのURL
$reload_url = 'http://www.uplink.co.jp/bettersex/soudan/minibbs.php';
// 画面の「終了」ボタンのリンク先
$return_url = 'http://www.uplink.co.jp/bettersex/soudan/minibbs.php';
// 掲示板の名前
$title = 'BetterSex ベター・セックス';
// --- 必要に応じて書き換える項目 ----------------------------------------------
// 1ページに表示する件数
$rows = 24;
// 最大書き込み件数
$max = 1000;
// ログファイルのファイル名
$log_file = 'data/log.txt';
// バックアップファイルを作る TRUE:作る(推奨) FALSE: 作らない
$backup = TRUE;
// バックアップのファイル名
$backup_file = 'data/log.bak';
// PHPのバージョン TRUE:4.1以前 FALSE:4.1以降
$php_old = FALSE;
// 時差
$time_diff = +9;
// --- CAPTCHA関連 ------------------------------------------------------------
// CAPTCHAテストによるロボットスパム防止を使う TRUE:captcha.jpを使う(デフォルト)/ FALSE:使わない
$captcha = TRUE;
// RC4の秘密鍵
$key = '4578b468c23d4';
// captcha.jpを使うのであれば、アカウントIDと秘密鍵をhttp://captcha.jpから取得してください。
// captcha.jpのアカウントID
$id = '1857';
// captchaの桁数
$captcha_length = 4;
// --- RSS関連 ----------------------------------------------------------------
// RSSを作成するなら TRUE:使う FALSE: 使わない
$rss = FALSE;
// RSSのファイル名
$rss_file = 'minibbs.rdf';
// RSSに表示する件数
$rss_rows = 8;
// --- プログラム部 ------------------------------------------------------------
// 初期化
$release = '4';
$base = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$m = $n = 0;
$tmp_file = 'tmp/' . uniqid( '' );
// --- captcha.phpに渡す文字列をランダムに生成し、DESで暗号化してURLエンコード -
if ( $captcha ) {
require( 'des.php' );
$auth = '';
$len = strlen( $base ) - 1;
for ( $n = 0; $n < $captcha_length; $n ++ ) $auth .= substr( $base, rand( 0, $len ), 1 );
$auth = urlencode( des( $key, $auth, 1, 0, null ) );
}
// --- 古いPHPのバージョンのため -----------------------------------------------
if ( $php_old ) {
$_POST['act'] = $HTTP_POST_VARS['act'];
$_POST['page'] = $HTTP_POST_VARS['page'];
$_POST['delkey'] = $HTTP_POST_VARS['delkey'];
$_POST['name'] = $HTTP_POST_VARS['name'];
$_POST['email'] = $HTTP_POST_VARS['email'];
$_POST['subject'] = $HTTP_POST_VARS['subject'];
$_POST['body'] = $HTTP_POST_VARS['body'];
$_POST['cookie'] = $HTTP_POST_VARS['cookie'];
$_POST['uniqid'] = $HTTP_POST_VARS['uniqid'];
$_POST['auth'] = $HTTP_POST_VARS['auth'];
$_POST['charenge'] = $HTTP_POST_VARS['charenge'];
$_COOKIE['name'] = $HTTP_COOKIE_VARS['name'];
$_COOKIE['email'] = $HTTP_COOKIE_VARS['email'];
$_SERVER["REMOTE_HOST"] = $HTTP_ENV_VARS["REMOTE_HOST"];
}
// --- 書き込み処理 ------------------------------------------------------------
if ( $_POST['act'] == 'write' ) {
// クッキー
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'] = '';
}
// エラー処理
if ( $_POST['name'] == '' ) error( '名前が入力されていません' );
if ( $_POST['subject'] == '' ) error( '件名が入力されていません' );
if ( $_POST['delkey'] == '' ) error( '削除キーが入力されていません' );
// CAPTCHAP
if ( $captcha ) {
$_POST['auth'] = trim( des( $key, urldecode( $_POST['auth'] ), 0, 0, null ) );
if ( strtoupper( $_POST['charenge'] ) != strtoupper( $_POST['auth'] ) ) error( 'CAPTCHAテストに失敗しました' );
}
if ( $backup ) if ( ! copy( $log_file, $backup_file ) ) error( 'バックアップファイルの作成に失敗しました' );
$line = '';
$line .= time() . '<>';
$line .= uniqid( '' ) . '<>';
$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 ( ! $fd = fopen( $tmp_file, 'w' ) ) error( 'テンポラリファイルのオープンに失敗しました' );
if ( fwrite( $fd, $line ) == FALSE ) error( 'ログファイルの書き込みに失敗しました' );
fclose( $fd );
if ( ! $fd1 = fopen( $log_file, 'r' ) ) error( 'ログファイルのオープンに失敗しました' );
if ( ! $fd2 = fopen( $tmp_file, 'a' ) ) error( 'テンポラリファイルのオープンに失敗しました' );
while ( ( $buff = fgets( $fd1, 8192 ) ) != FALSE ) fwrite( $fd2, $buff );
fclose( $fd2 );
fclose( $fd1 );
if ( ! rename( $tmp_file, $log_file ) ) error( 'ファイル名の変更に失敗しました' );
// RSSファイルの作成
if ( $rss ) mkrss();
}
// --- 削除処理 ----------------------------------------------------------------
if ( $_POST['act'] == 'del' ) {
if ( $backup ) if ( ! copy( $log_file, $backup_file ) ) error( 'バックアップファイルの作成に失敗しました' );
if ( ! $fd1 = fopen( $log_file, 'r' ) ) error( 'ログファイルのオープンに失敗しました' );
if ( ! $fd2 = fopen( $tmp_file, 'w' ) ) error( 'テンポラリファイルのオープンに失敗しました' );
while ( ( $line = fgets( $fd1, 8192 ) ) != FALSE ) {
list( $time, $uniqid, $delkey, $name, $email, $remote_host, $date, $subject, $body ) = explode( '<>', $line );
if ( $uniqid == $_POST['uniqid'] and $delkey == md5( $_POST['delkey'] ) ) continue;
if ( $uniqid == $_POST['uniqid'] and $passwd == $_POST['delkey'] ) continue;
fwrite( $fd2, $line );
}
fclose( $fd2 );
fclose( $fd1 );
if ( ! rename( $tmp_file, $log_file ) ) error( 'ファイル名の変更に失敗しました' );
// RSSファイルの作成
if ( $rss ) mkrss();
}
// --- エラーメッセージ出力 ----------------------------------------------------
function error( $message ) {
?>
エラーが発生しました。 ブラウザのバックボタンで戻り、もう一度実行してみてください。 |
性にまつわる悩みを相談しあう場です なかなか人に相談しづらい性の悩み。セックス相談室は開かれたセックスカウンセリングスペースです。友人には話せないあんなこと、こんなことを是非こちらで打ち明けてください。また、それについて何か良いアドバイスが出来る方がいましたら是非相談に乗ってあげてください。 ※公序良俗に反するコメントはご遠慮ください。相応しくないと判断した場合は、通知なしにコメントを削除いたします。 $fp = fopen( $log_file, 'r' ); for ( $m =0; $m < $page; $m ++ ) fgets( $fp, 8192 ); while ( ( $line = fgets( $fp, 8192 ) ) != FALSE ) { if ( $n ++ >= $rows ) break; list( $time, $uniqid, $delkey, $name, $email, $remote_host, $date, $subject, $body ) = explode( '<>', $line ); ?> 投稿日 投稿者 if ( $email != '' ) echo "$name"; else echo $name ?> [] 削除 } ?>
※ [削除]ボックスにチェックし、投稿時に設定した削除キーを入力してボタンを押せば削除できます。 ※ 削除キーに管理者パスワードを入力すると任意の記事の削除が可能です。 |