フォームでテキスト追記

PHPのシンタックス

  1. HOME
  2. テキスト追記

メモ入力をテキストファイルに追記する

  • memo:

ファイルのロックとアンロック

指定モード 説明
LOCK_SH 共有ロック(読み込んでいる最中に書き込まれないようにブロックする)
LOCK_EX 排他ロック(書き込んでいる最中に読み書きされないようにブロックする)
LOCK_UN ロックを解除する
LOCK_NB ロックの解除を待たずにfalseを返す(Windowsではサポートされない)

※後からのアクセスは待ち状態となる為、読み書きが終わったら速やかにロックの解除を行う

ページをリダイレクト

リダイレクトはユーザーの入力を待たずにコードで他のURLへ移動する機能です。
URLは相対パスではなく、"https://~~~~.com"のような絶対パスのURLを指定します。
exit()により、残りのコードは実行せずにページ移動する

header("Location:" . $url);
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>';
}
?>