topic: file-io (read / write / CSV / paths / upload概念) / ch03 — ファイルに書く / 演習 02
📝 ドリル 02 — `FILE_APPEND` で追記する
問題
一時ファイルに以下の順で書き込み、最終的な中身を読み返して出力してください。最後に unlink で削除します。
"line1\n"を書く (上書き)"line2\n"をFILE_APPENDで追記"line3\n"をFILE_APPENDで追記- ファイル全体を読み返して
echo 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);FILE_APPENDを渡さないと 上書き されて前の中身が消える- ログ書き込みでは
FILE_APPEND | LOCK_EX(排他ロック付き追記) が定番
つまづいたら
- 出力が
line3だけになる → 2 回目以降のfile_put_contentsにFILE_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);