<?php
//===================初期設定=====================
//時間の取得
$now = date("Y/m/d H:i");
$data_file = "./bbs.log"; //データファイル名
$data_max = 100; //データ最大記録数
$page_view = 10; //1ページの記事表示件数
$passwd = "777"; //管理者用パスワード
//================================================

//スーパーグローバル変数対策
if(!isset($HTTP_USER_AGENT)){
    
$http_user_agent = $_SERVER['HTTP_USER_AGENT'];
}else{
    
$http_user_agent = $HTTP_USER_AGENT;
}
if(!isset(
$PHP_SELF)){ $PHP_SELF = $_SERVER["PHP_SELF"]; }
if(!isset(
$flag)){ $flag = $_GET['flag']; }
if(!isset(
$re_sub)){ $re_sub = $_POST['re_sub']; }
if(!isset(
$code)){
    if(
$_POST['code']){
        
$code = $_POST['code'];
    }else{
        
$code = $_GET['code'];
    }
}
if(!isset(
$action)){
    if(
$_POST['action']){
        
$action = $_POST['action'];
    }else{
        
$action = $_GET['action'];
    }
}
if(!isset(
$delcode)){ $delcode = $_POST['delcode']; }
if(!isset(
$password)){ $password = $_POST['password']; }
if(!isset(
$ress)){ $ress = $_POST['ress']; }
if(!isset(
$name)){ $name = $_POST['name']; }
if(!isset(
$email)){ $email = $_POST['email']; }
if(!isset(
$hp)){ $hp = $_POST['hp']; }
if(!isset(
$subject)){ $subject = $_POST['subject']; }
if(!isset(
$comment)){ $comment = $_POST['comment']; }
if(!isset(
$tag)){ $tag = $_POST['tag']; }
if(!isset(
$pass)){ $pass = $_POST['pass']; }
if(!isset(
$view_code)){ $view_code = $_GET['view_code']; }
if(!isset(
$pline)){ $pline = $_GET['pline']; }
//エスケープ記号対策
$name = stripslashes($name);
$subject = stripslashes($subject);
$comment = stripslashes($comment);

// 振り分け
$user_agent= explode( "/", $http_user_agent);
if(
$user_agent[0] == "J-PHONE"){
    
$title_gazou = "title.png";
    
$home_gazou = "home.png";
}else{
    
$title_gazou = "title.gif";
    
$home_gazou = "home.gif";
}
//携帯の判定
if($user_agent[0] == "DoCoMo" || substr("$user_agent[0]",0,4) == "KDDI" || $user_agent[0] == "J-PHONE"){
    
$keitai_flag = 1;
}
?>

<HTML>
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=Shift_JIS">
    <TITLE>携帯掲示板</TITLE>

<?php
echo "<center><img src=$title_gazou></center>\n";

//===============インライン関数===================
function inline_link($link){
    
$link = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$link);
    return
$link;
}
//===============データの削除==================
if($action == "delete"){
    if((
$delcode != "") && ($password != "")){
        
$delfile = file($data_file);
        
$fp = fopen($data_file, "w");
        for(
$i=0; $i<sizeof($delfile); $i++){
            list(
$dcode,$dress,$dname,$demail,$dhp,$dsubject,$dcomment,$dpass,$dnow,$dhost,$dagent) = split(",", $delfile[$i]);
            if ((
$password == $dpass) || ($password == $passwd)) {
                if (
$delcode == $dcode) {
                    
$delfile[$i] = "";
                }
            }
            
fputs($fp,$delfile[$i]);
        }
        
fclose($fp);
        unset(
$delfile);
    }
    if(
$keitai_flag){
        echo
"<a href=$PHP_SELF>一覧に戻る</a><br>\n";
    }else{
        echo
"<META HTTP-EQUIV=refresh CONTENT=0;URL=$PHP_SELF>\n";
    }
//===============データの書き込み=================
}elseif($action == "regist"){
    if(
$name && $subject){
        
$code = time(); //アクセス時の秒数
        //ホスト名を取得
        
$host = getenv("REMOTE_HOST");
        
$addr = getenv("REMOTE_ADDR");
        if(
$host == "" || $host ==$addr){
            
$host = gethostbyaddr($addr);
        }
        
//訪問者のブラウザを取得
        
$agent = getenv("HTTP_USER_AGENT");
        
//ここから書き込みデータの調整
        
if($keitai_flag){ //携帯からの書き込みならデコード処理
            
$name = urldecode($name);
            
$subject = urldecode($subject);
            
$comment = urldecode($comment);
        }
        
$name = htmlspecialchars($name); //特殊文字のHTMLエントリへの変換
        
$email = htmlspecialchars($email);
        
$hp = htmlspecialchars($hp);
        
$subject = htmlspecialchars($subject);
        
$comment = htmlspecialchars($comment);
        
$comment = nl2br($comment); //HTML改行文字の挿入
        
$comment = str_replace("\r", "", $comment); //文字列の置換
        
$comment = str_replace("\n", "", $comment);
        
//ログファイルの区切文字(",")と区別するために文字コード(&#44)に書き換える。
        
$ress = str_replace(",", "&#44;",$ress);
        
$name = str_replace(",", "&#44;",$name);
        
$email = str_replace(",", "&#44",$email);
        
$hp = str_replace(",", "&#44",$hp);
        
$subject = str_replace(",", "&#44;",$subject);
        
$comment = str_replace(",", "&#44;",$comment);
        
//インラインリンクを実現(URLのみ)
        
$comment = inline_link($comment);

        
$message = file($data_file);
        
//ログファイルの区切文字(",")と区別するために文字コード(&#44)に書き換え。
        
$fname = str_replace(",", "&#44;",$fname);
        
//配列要素を文字列により連結
        
$input_msg = implode(",", array($code,$ress,$name,$email,$hp,$subject,$comment,$pass,$now,$host,$agent));
        
$fp = fopen($data_file, "w");
        
rewind($fp);
        
fputs($fp, "$input_msg\n");
        
//最大記録数の調整
        
if(($data_max * 1.2) < sizeof($message)){
            
$msg_num = $data_max - 1;
        }else{
            
$msg_num = sizeof($message);
        }
        for(
$i = 0; $i < $msg_num; $i++){
            
fputs($fp, $message[$i]);
        }
        
fclose($fp);
        unset(
$message);
    }
    if(
$keitai_flag){
        echo
"<a href=$PHP_SELF>一覧に戻る</a><br>\n";
    }else{
        echo
"<META HTTP-EQUIV=refresh CONTENT=0;URL=$PHP_SELF>\n";
    }
//===============登録用画面=================
}elseif($action == "toroku"){
    echo
"<br>各項目にご記入の上、下の「送信」ボタンを押して下さい。尚、お名前と題目は必須項目になっています。<BR>\n";
    echo
"<FORM ACTION=$PHP_SELF METHOD=POST>\n";
    echo
"<input type=hidden name=action value=regist>\n";
    echo
"<FONT COLOR=#000099>■お名前</FONT><BR>\n";
    echo
"<INPUT TYPE=TEXT NAME=name SIZE=18><BR>\n";
    echo
"<FONT COLOR=#000099>■E-mail</FONT><BR>\n";
    echo
"<INPUT TYPE=TEXT NAME=email SIZE=18><BR>\n";
    echo
"<FONT COLOR=#000099>■URL</FONT><BR>\n";
    echo
"<INPUT TYPE=TEXT NAME=hp SIZE=18><BR>\n";
    echo
"<FONT COLOR=#000099>■題目</FONT><BR>\n";
    echo
"<INPUT TYPE=TEXT NAME=subject SIZE=18><BR>\n";
    echo
"<FONT COLOR=#000099>■コメント</FONT><BR>\n";
    echo
"<TEXTAREA NAME=comment ROWS=3 COLS=18></TEXTAREA><BR>\n";
    echo
"<FONT COLOR=#000099>■パスワード</FONT><BR>\n";
    echo
"<INPUT TYPE=TEXT NAME=pass SIZE=7><BR>\n";
    if(
$flag == 'return'){
        echo
"<input type=submit value=返信>\n";
        echo
"<input type=hidden name=ress value=$code>\n";
    }else{
        echo
"<INPUT TYPE=SUBMIT NAME=Submit VALUE=送信> <INPUT TYPE=RESET NAME=Reset VALUE=リセット>\n";
    }
    echo
"</FORM><br><a href=$PHP_SELF>一覧に戻る</a>\n";
}elseif(
$action == "view"){
    
$message = file($data_file);
    for(
$i=0; $i<sizeof($message); $i++){
        list(
$code,$ress,$name,$email,$hp,$subject,$comment,$pass,$now,$host,$agent) = split(",", $message[$i]);
        if(
$code == $view_code){
            echo
"<form method=POST action=$PHP_SELF>\n";
            echo
"<font color=#000099>■$subject</font><br>\n";
            if(
$email != ""){
                echo
"<a href=mailto:$email>$name</a>\n";
            }else{
                echo
"$name\n";
            }
            if(
$hp != ""){
                echo
" <a href=$hp><img src=./" . $home_gazou . " border=0></a>\n";
            }
            echo
"<br>\n";
            echo
"<font color=#CC0099>$now</font><br>\n";
            if(
$comment){
                echo
"[コメント]<br>$comment<br><br>\n";
            }
            echo
"<font color='green'>[$host] <br>$agent</font><br>\n";
            echo
"<input type=hidden name=action value=delete>\n";
            echo
"<input type=hidden name=delcode value=$code>\n";
            echo
"削除キー:<input type=text size=7 name=password>\n";
            echo
"<input type=submit value=削除>\n";
            echo
"</form><br>\n";
            if(
$ress == ""){
                echo
"<a href=$PHP_SELF?action=toroku&code=$code&flag=return>この記事に返信</a><br>\n";
            }
            echo
"<a href=$PHP_SELF>一覧に戻る</a>\n";
        }
    }
    unset(
$message);
//===============ログの表示=================
}else{
    echo
"<form method=POST action=$PHP_SELF>\n";
    echo
"<center><input type=submit value=新規投稿></center>\n";
    echo
"<input type=hidden name=action value=toroku>\n";
    echo
"</form>\n";
    
//親記事だけを配列に抜き出す
    
$message = file($data_file);
    for(
$i=0; $i<sizeof($message); $i++){
        list(
$code,$ress,$name,$email,$hp,$subject,$comment,$pass,$now,$host,$agent) = split(",", $message[$i]);
        if(
$ress == ""){
            
$PARENT[] = $message[$i];
        }
    }

    
$msg_count = count($PARENT); //親記事の行数をカウント
    
if($pline == ""){
        
$p_line = 0;
    }else{
        
$p_line = $pline;
    }
    
$end_data = $msg_count - 1;
    
$page_end = $p_line + ($page_view - 1);
    if(
$page_end >= $end_data){
        
$page_end = $end_data;
    }
    for(
$i=$p_line; $i<=$page_end; $i++){
        list(
$code2,$ress2,$name2,$email2,$hp2,$subject2,$comment2,$pass2,$now2,$host2,$agent2) = split(",", $PARENT[$i]);
        
//親記事の表示
        
echo "<font color=#000099>■</font><a href=$PHP_SELF?action=view&view_code=$code2>$subject2</a><br>\n";
        echo
$name2 . "<br>\n";
        echo
"<font color='green'>$now2</font><br>\n";
        
//返信記事の表示
        
for($j=0; $j<sizeof($message); $j++){
            list(
$code3,$ress3,$name3,$email3,$hp3,$subject3,$comment3,$pass3,$now3,$host3,$agent3) = split(",", $message[$j]);
            if(
$code2 == $ress3){
                echo
"<a href=$PHP_SELF?action=view&view_code=$code3>$subject3</a></font><br>\n";
                echo
" " . $name3 . "<br>\n";
                echo
" <font color='green'>$now3</font><br>\n";
            }
        }
    }
    if(
$page_end >= $page_view){
        
$page_count = floor($page_end / $page_view);
        
$prev_line = ($page_count - 1) * $page_view;
        echo
"<a href=$PHP_SELF?pline=$prev_line>前のページ</a><br>\n";
    }
    
$next_line = $page_end + 1;
    if(
$page_end != $end_data){
        echo
"<a href=$PHP_SELF?pline=$next_line>次のページ</a><br>\n";
    }
    unset(
$message);
}
?>

<hr>
Powered by <a href="http://www.komonet.ne.jp/">KOMONET</a>
</BODY>
</HTML>