メモ入力をテキストファイルに追記する
ファイルのロックとアンロック
指定モード | 説明 |
---|---|
LOCK_SH | 共有ロック(読み込んでいる最中に書き込まれないようにブロックする) |
LOCK_EX | 排他ロック(書き込んでいる最中に読み書きされないようにブロックする) |
LOCK_UN | ロックを解除する |
LOCK_NB | ロックの解除を待たずにfalseを返す(Windowsではサポートされない) |
※後からのアクセスは待ち状態となる為、読み書きが終わったら速やかにロックの解除を行う
ページをリダイレクト
リダイレクトはユーザーの入力を待たずにコードで他のURLへ移動する機能です。
URLは相対パスではなく、"https://~~~~.com"のような絶対パスのURLを指定します。
exit()により、残りのコードは実行せずにページ移動する
header("Location:" . $url);
exit();
exit();
フォームのソースコード
<form method="POST" action="writeMemo.php">
<ul>
<li><span>memo:</span>
<textarea name="memo" cols="25" rows="4" maxlength="100" placeholder="メモを書く"></textarea>
</li>
<li><input type="submit" value="送信する"></li>
</ul>
</form>
書き込みページのソースコード
<?php
if (empty($_POST["memo"])) {
//POSTされた値がないとき入力ページへリダイレクト
$url = "https://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);
header("Location:" . $url . "/inputMemo.php");
exit();
}
date_default_timezone_set('Asia/Tokyo');
$memo = $_POST["memo"];
$date = date("Y/n/j G:i:s", time());
$writedata = "---\n" . $date . "\n" . $memo . "\n";
$filename = "../data/memo.txt";
try {
$fileobj = new SplFileObject($filename, "a+b");
} catch (Exception $e) {
echo '<span class="error">エラーがありました</span>';
echo $e->getMessage();
exit();
}
$fileobj->flock(LOCK_EX); // 排他ロック
$result = $fileobj->fwrite($writedata); //メモを追記
$fileobj->flock(LOCK_UN); //アンロック
//メモを読むページへリダイレクト
$url = "https://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);
header("Location:" . $url . "/readMemo.php");
exit();
読み込みページのソースコード
<?php
require_once("es.php"); //フォーム~入力データのチェック~で参照してね
?>
<!doctype html>
....↓
....↓
<?php
$filename = "../data/memo.txt";
try {
$fileobj = new SplFileObject($filename, "rb");
} catch (Exception $e) {
echo '<span class="error">エラーがありました</span>';
echo $e->getMessage();
exit();
}
$fileobj->flock(LOCK_SH);
$readdata = $fileobj->fread($fileobj->getSize());
$fileobj->flock(LOCK_UN);
if (!($readdata === FALSE)) {
$readdata = es($readdata);
$readdata_br = nl2br($readdata, false);
echo "{$filename}を読み込みました", "<br>";
echo $readdata_br, "<HR>";
echo '<a href="inputMemo.php">メモ入力ページへ</a>';
} else {
echo '<span class="error">ファイルを読み込めませんでした</span>';
}
?>