14:53:16 :: clearは特定のホストからでないと実行されない ( わに :: 10.120.200.8 )
14:53:04 :: でも再読込のボタンも作った ( あひる :: 10.120.200.30 )
14:52:42 :: 名前がなければ再読込と表示だけする。 ( くま :: 10.120.200.7 )
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 :: 開始しました。
インターネット公開に当たりファイルの書き込みを禁止しています。「Permission denied 」などとエラーが出ます。[再読込](=名前なしの送信)はできます。これでエラーは消えます。
<form action="h11a05.php" method="post"> <p>お名前:<input type="text" name="YourName" size="20" maxlength="20" /> メッセージ:<input type="text" name="Message" size="80" maxlength="80" /></p> <p><input type="submit" name="Button" value="送信" /> <input type="submit" name="Button" value="再読込" /> <input type="submit" name="Button" value="clear" /></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 == "再読込" ) $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 == "10.10.200.41"){ //送信者のアドレスが指定のものだったら $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; } } ?>