目次
記事の並びを降順にする
コード
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php $data = @file('ファイル名', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) or die('ファイルが開けませんでした'); $cnt = count($data); print('<dl>'); foreach (array_reverse($data) as $row): $datum = explode("\t", $row); ?> <dt><?php printf('%02d.%s', $cnt, e($datum[1])); ?>(<?php print(e($datum[0])); ?>)</dt> <dd>メッセージ:<?php print(e($datum[2])); ?></dd> <hr /> <?php $cnt--; endforeach; print('</dl>'); ?> |
ファイルを読み込んで中身ひっくり返す的な動き。
file
ファイル全体を読み込んで配列に格納する。
第一引数:ファイルパス
第二引数:オプションパラメータ。省略可。
FILE_IGNORE_NEW_LINES:各要素の最後に改行文字を追加しない。
FILE_SKIP_EMPTY_LINES:空行の読み飛ばし。
array_reverse
要素を逆順にして配列を返す。
今回はfileで読み込んだ配列をひっくり返す。
ファイルへの登録順自体を逆順にする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php $org_file = fopen('message.dat', 'rb'); $tmp_file = fopen('message.tmp', 'wb'); flock($org_file, LOCK_SH); flock($tmp_file, LOCK_EX); fwrite($file, date('Y年 m月 d日 H:i:s')."\t"); fwrite($file, $_POST['name']."\t"); fwrite($file, $_POST['message']."\n"); while ($row = fgets($org_file)) { fwrite($tmp_file, $row); } flock($tmp_file, LOCK_UN); flock($org_file, LOCK_UN); fclose($tmp_file); fclose($org_file); unlink('message.dat'); rename('message.tmp', 'message.dat'); header('Location: http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/input_data.html'); |
全体の流れとしては、
一時ファイルに1行書き込み→一時ファイルにメインファイルのデータ(古いデータ)を書き込み(2行目以降に追加する)→メインファイルを削除→一時ファイルをメインファイルに変更
といった感じ。
unlink
ファイルを削除する。
rename
第一引数:変更前の名前
第二引数:変更後の名前
入力者の名前をCOOKIEに保存する
COOKIEとは
HTTP cookie
ウェブブラウザに一時的にデータを保存する仕組み。
コード
入力フォーム
10 11 12 13 14 15 16 |
<form action="setcookie.php" method="POST"> <div> <label for="name">名前:</label> <input type="text" name="name" size="50" maxlength="50" value="<?php print($_COOKIE['name']); ?>"> </div> <input type="submit" value="送信"> </form> |
COOKIE保存メソッドを行うPHPファイル
1 2 3 |
<?php setcookie('name', $_POST['name'], time() + (60 * 60 * 24 * 30)); header('Location: http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/cookie.php'); |
$_COOKIE
スーパーグローバル変数。
$_SESSIONや$_POST,$_SERVERなどと同じように渡された変数を連想配列で格納している。
もちろんHTTP cookieから渡されたもののみ格納。
クッキーを送信する。
第一引数:クッキーの名前
以下は全て省略可。
第二引数:クッキーの値。今回はフォームに入力された名前を入れている。
第三引数:クッキーの有効期限。今回は30日後。省略するとブラウザを閉じるまで。
time
現在のUnixタイムスタンプを返す。
今回はtimeに30日分の時間を追加して期限を30日後としている。
COOKIEでカウント処理
何回訪問した?みたいなのを数える。
1 2 3 4 5 6 7 |
<?php if(isset($_COOKIE['visit']) ){ $visit = $_COOKIE['visit']; } else { $visit = 0; } $visit++; |
クッキーにvisitがセットされてなかったら変数$visitに0を入れてインクリメント。
クッキーがセットされてたら変数$visitにセットされてる値を入れてインクリメント。
コメント
No Trackbacks.