14:59:59 :: 公開版では記録はしません。( あらいぐま :: 10.120.200.88 )
14:53:16 :: clearは特定のホストからでないと実行されない ( わに :: 10.120.200.8 )
14:52:42 :: 名前がなければ再読込と表示だけする。 ( くま :: 10.120.200.7 )
14:53:04 :: でも再読込のボタンも作った ( あひる :: 10.120.200.30 )
14:52:33 :: 名前は自由だがIPアドレスでホストが特定される☆ ( ぞう :: 10.120.200.27 )
14:51:52 :: 最新のものが上になるように整列 ( あひる :: 10.120.200.30 )
14:51:29 :: メッセージはここ ( 名前はここ :: 10.120.200.31 )
14:50:59 :: 開始しました。
これはhtml5準拠です。
<form action="h11a05.php" method="post"> <p><label>名前:<input name="YourName" size="20" maxlength="20"></label> <label>メッセージ:<input name="Message" size="80" maxlength="80"></label></p> <p><button name="Button" value="send">送信</button></p> <p><button name="Button" value="reload">再読込</button></p> <p><button name="Button" value="clear">消去</button></p> </form>
ここで、h11a05.php はこのデータを処理するphpプログラムを書くファイル名ですが、今回も自分自身になります。
clearはデータがたまりすぎた場合にクリアするボタンです。通信先のIPアドレスで自分のホストだけに許可しています。
<?php
$RECDFILE_NAME = "storedata.txt"; //データを保存するファイルの名前
$BASE_PATH = getcwd(); //プログラムのあるディレクトリ
$RECD_FILE = $BASE_PATH . "/" . $RECDFILE_NAME; //ファイルのパス
$name = $_POST['YourName']; //formからのデータ
$message = $_POST["Message"] ;
$button = $_POST["Button"] ;
$sender = $_SERVER['REMOTE_ADDR'] ; //送信してきたアドレスをウェブサーバーから教えてもらう
if ( $button == "reload" ) $name="";
if ( $name ){ //名前が入っている時だけ記録する。
$time=date("H:i:s"); //時刻を記憶しておく
$fp = fopen($RECD_FILE,"a"); //ファイルを追記で開く
stream_set_write_buffer($fp, 0); //バッファを禁止
flock($fp, LOCK_EX); //ファイルを占有にして書き込む
fputs($fp, "<p>$time :: $message ( $name :: $sender )</p>\n");
flock($fp, LOCK_UN); //ファイルの占有を解除
fclose($fp); //ファイルを閉じる(保存)
}
if ( $button == "clear" ){ //押されたのがclearだったら
if ( $sender == "192.168.200.200"){ //送信者のアドレスが指定のものだったら
$time=date("H:i:s"); //時刻を記憶しておく
$fp = fopen($RECD_FILE,"w"); //ファイルを書込で開く
//(同じ名前のファイルがあれば消去される)
stream_set_write_buffer($fp, 0);
flock($fp, LOCK_EX);
fputs($fp, "<p>$time :: 開始しました。</p>\n");
flock($fp, LOCK_UN);
fclose($fp);
}
}
if ( file_exists($RECD_FILE) ){ //ファイルがあった時だけおこなう
$result = file($RECD_FILE); //ファイルを読んで配列に格納
$result = array_reverse($result); //配列の順序を逆にする
foreach($result as $line){ //配列の内容を全部書き出す
print $line;
}
}
?>
ウェブサーバーやphpのシステムが扱うファイルは安全のため書込み禁止になっています。今回はphpがファイルに追加書き込みをしますから書き込みを許可しなければなりません。そこで書込み許可をしたファイルとして storedata.txt を用意しました。
校内だけのルールですが、ファイルを消してしまうと次に作った時には書き込みは許可されていません。また他の名前のファイルを作っても一般ユーザーでは書きこみ許可ができませんので注意してください。
を表示して、「sotead」と入力してもらうなどです。上記のページを作りなさい。phpのページファイルは keijiban.php という名前で保存します。index.htmlに「掲示板」という名前の リンクを作ります。
action="h11a05.php" は action="keijiban.php" にしなければなりません。
$sender == "10.10.200.41" は自分のIPアドレスにしないとクリアできません。