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

📝 ドリル 01 — 一時ファイルに書いて読み返す

問題

OS の一時ディレクトリに一時ファイルを作って "Hello, File!\n" を書き込み、その中身を読み返して標準出力に出してください。最後にその一時ファイルを unlink で消してください。

期待される出力:

Hello, File!

採点

php scripts/grade.php topics/14-file-io/ch03-write-file/drill/01-write-and-read/

ヒント

$tmp = tempnam(sys_get_temp_dir(), 'dojo_io_');
file_put_contents($tmp, "Hello, File!\n");
echo file_get_contents($tmp);
unlink($tmp);
▶ 3v4l で実行
  • tempnam($dir, $prefix) : $dir 配下に被らないファイル名を作り、空ファイルを置いてパスを返す
  • sys_get_temp_dir() : OS の一時ディレクトリパス (Mac/Linux なら /tmp)
  • unlink($path) : ファイルを削除する

なぜ一時ディレクトリに書くのか

  • リポジトリ内 (__DIR__ 配下) に書くと、採点を回すたびにリポジトリが汚れる
  • sys_get_temp_dir() 配下 + unlink で消す = 「実行後は何も残らない」 が L14 の作法

つまづいたら

  • Hello, File! の後に空行が 1 つ余計に出る → echo file_get_contents($tmp) . "\n"; のように追加で改行を足していないか
  • unlinkWarning が出る → tempnam の戻り値 (フルパス) を渡しているか。null や空文字を渡していないか

テストケース

期待される出力

Hello, File!

📄 starter.php(雛形)

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

<?php

// TODO: tempnam(sys_get_temp_dir(), 'dojo_io_') で一時ファイルパスを得る
// $tmp = tempnam(...);

// TODO: file_put_contents で "Hello, File!\n" を書く

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

// TODO: unlink($tmp) で一時ファイルを削除する (CI を汚さない)
✅ 解答例を見る(自分で解いてから)
<?php

// 一時ファイルに書く → 読み返して出力 → 削除する
$tmp = tempnam(sys_get_temp_dir(), 'dojo_io_');

file_put_contents($tmp, "Hello, File!\n");
echo file_get_contents($tmp);

unlink($tmp);