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.120.200.31"){  //送信者のアドレスが指定のものだったら
      $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;
   }
}
?>
 を表示して、「sotead」と入力してもらうなどです。