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
[…] 4/7水、PHP『 超 』初心者勉強会に参加して来ました。4 | 水玉製作所 […]