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

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

20100410
Category:梅原 /Tags:,

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

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

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

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

チャットプログラム

<?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>

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

関連記事:

  1. No comments yet.
Comments are closed.