topic: file-io (read / write / CSV / paths / upload概念) / ch03 — ファイルに書く / 演習 02

📝 ドリル 02 — `FILE_APPEND` で追記する

問題

一時ファイルに以下の順で書き込み、最終的な中身を読み返して出力してください。最後に unlink で削除します。

  1. "line1\n" を書く (上書き)
  2. "line2\n"FILE_APPEND で追記
  3. "line3\n"FILE_APPEND で追記
  4. ファイル全体を読み返して echo
  5. unlink で消す

期待される出力:

line1
line2
line3

採点

php scripts/grade.php topics/14-file-io/ch03-write-file/drill/02-append/

ヒント

$tmp = tempnam(sys_get_temp_dir(), 'dojo_io_');
file_put_contents($tmp, "line1\n");
file_put_contents($tmp, "line2\n", FILE_APPEND);
file_put_contents($tmp, "line3\n", FILE_APPEND);
echo file_get_contents($tmp);
unlink($tmp);
▶ 3v4l で実行
  • FILE_APPEND を渡さないと 上書き されて前の中身が消える
  • ログ書き込みでは FILE_APPEND | LOCK_EX (排他ロック付き追記) が定番

つまづいたら

  • 出力が line3 だけになる → 2 回目以降の file_put_contentsFILE_APPEND を渡し忘れている (= 上書き)
  • line1line2line3 のように改行が無い → 各文字列の末尾 "\n" を書き忘れている ("line1" ではなく "line1\n")

テストケース

期待される出力

line1
line2
line3

📄 starter.php(雛形)

このコードから書き始めてください。

<?php

// TODO: tempnam(sys_get_temp_dir(), 'dojo_io_') で一時ファイルを作る

// TODO: file_put_contents で "line1\n" を書く (上書き = FILE_APPEND なし)

// TODO: file_put_contents で "line2\n" を FILE_APPEND 付きで追記する
// TODO: file_put_contents で "line3\n" を FILE_APPEND 付きで追記する

// TODO: file_get_contents で読み返して echo する

// TODO: unlink($tmp) で削除する
✅ 解答例を見る(自分で解いてから)
<?php

// FILE_APPEND で 3 回追記 → 読み返して出力 → 削除
$tmp = tempnam(sys_get_temp_dir(), 'dojo_io_');

// 1 回目は上書き (FILE_APPEND なしで OK だが、tempnam が作る空ファイルを置き換える形)
file_put_contents($tmp, "line1\n");
// 2 回目以降は FILE_APPEND で末尾追記
file_put_contents($tmp, "line2\n", FILE_APPEND);
file_put_contents($tmp, "line3\n", FILE_APPEND);

echo file_get_contents($tmp);

unlink($tmp);