4/7水、PHP『 超 』初心者勉強会に参加して来ました。4

PHP 『 超 』 初心者勉強会 – チャット作成(後半)に行って来ました。

最初の30分くらいはエディタソフトの話。
WindowsだとPHPエディタ、秀丸。
MacOSXだとTextMate
Win/Mac両対応のIDEだとnetBeans, Eclipse。
http://ubuntu.php-beginner.net/setup2/editor/
まあ、いろいろあるよね。
話を聞きながら、以前ほどエディタとかコードの整形とかにこだわらなくなっている自分に気がついた。ガッツリPHPをやる気なら、また違うのかもしれないけど。

その後、PHPの授業がスタート。
前半4/6の続き。

細々と必要な機能の追加。
文字コードの指定、名前をクッキーに保存、投稿内容のエスケープ、同時書き込みへの対処など。

チャットプログラム

[sourcecode language=”php”]
<?php

// 文字化け防止
header("Content-type: text/html; charset=utf-8");

// $_POST["name"]が空っぽだったらクッキーから取得
if(empty($_POST["name"])){
$name = $_COOKIE["name"];
}else{
$name = $_POST["name"];
}

// クッキーに保存する有効期間(1年)
$expire = time() + (60*60*24*365);

// クッキーに設定(識別名、値、有効期限の順で指定。更に指定可能だが省略)
setcookie( "name", $name, $expire );

?>
<html>
<head>
<title>PHP『超』初心者勉強会-チャットプログラム</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>

<form method="post">
名前:<br/>
<input type="text" name="name" value="<?=$name?>" /><br/>
コメント:<br/>
<textarea name="comment" style="width:100%;"></textarea><br/>
<input type="submit" value="書き込み" /><br/>
</form>
<?php

// ファイル名
$file = "log.txt";

// 条件分岐 if文
if( empty( $_POST["name"] ) ){
print "名前が未入力です";
}else if( empty( $_POST["comment"] ) ){
print "コメントが未入力です";
}else{
// ログ
$name = $_POST["name"];
$comment = $_POST["comment"];
//タグをエスケープしてくれる。ENT_QUOTES=定義定数。シングルクオートもエスケープする。
$name = htmlentities( $name, ENT_QUOTES, ‘utf-8’);
$comment = htmlentities( $comment, ENT_QUOTES, ‘utf-8’);
$log = "$name\t$comment\n";
print "書き込みました!";
}

// ファイルのポインタを取得
$FILE = fopen( $file, ‘a+’);

// ファイルロック
flock($FILE, LOCK_EX);

// 書き込み
fwrite( $FILE, $log);

// ファイルポインタを先頭に戻す
fseek( $FILE, 0);

// ファイルサイズを取得
$size = filesize($file);

// ファイルに記録されているログを取得
$temp = fread( $FILE, $size);

// ロック解除しない
//flock($FILE, LOCK_UN);

// クローズしない
//fclose($FILE);

// \nで配列に区切る
$arr = explode( "\n", $temp);

// 配列を上下入れ替え
$arr = array_reverse($arr);

foreach($arr as $str){
list( $name, $comment ) = explode( "\t", $str);
echo " <b>$name</b> $comment <br/>";
}

?>
</body>
</html>
[/sourcecode]
今回は大切な話なんだけど、かなりゆっくりに感じた。次回mySQL導入編に向けて、しっかり地固めな意図だったのかな。

1 Comment

Comments are closed.