概要

書き込みも読み込みと対称で、手軽さの file_put_contents($path, $data) と、制御性の fopen('w') + fwrite + fclose の 2 系統。前者は「文字列を渡すだけで全部書く」、後者は「ハンドルを開きながら何度も書き足す」。普段使いはほぼ file_put_contents で済む。

モードの違い が地味に重要。デフォルトは 上書きモード (既存ファイルの中身を消してから書く)。file_put_contents(..., FILE_APPEND)fopen($path, 'a')追記モード になり、末尾に足す動きに変わる。ログや日次レポートなど「過去分を残しつつ書き足す」用途では追記必須。複数プロセスから同時に書く可能性がある場合は LOCK_EX (排他ロック) を併用する。

教育用ドリルでは 書き込み先を必ず sys_get_temp_dir() 配下 にして、終わったら unlink($tmp) で消す約束。「リポジトリ内のファイルを書き換えない」「CI で何度回しても残骸が残らない」ためのお作法。実務でも tempnam(sys_get_temp_dir(), 'prefix_') で一時ファイルを取って作業し、完了後に消すパターンは頻出。

学習目標

ドリル

# 内容
01-write-and-read/ 一時ファイルに書いて読み返す (ラウンドトリップ)
02-append/ FILE_APPEND で 2 回書いて、追記されていることを読み返しで確認

確認のコツ

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

問題

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

期待される出力:

Hello, File!

ヒント

$tmp = tempnam(sys_get_temp_dir(), 'dojo_io_');
file_put_contents($tmp, "Hello, File!\n");
echo file_get_contents($tmp);
unlink($tmp);

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

つまづいたら

演習: ドリル 02 — `FILE_APPEND` で追記する

問題

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

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

期待される出力:

line1
line2
line3

ヒント

$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);

つまづいたら

この章を AI に聞く

  1. 「ch03 — ファイルに書く」のつまずきやすいポイントを、初学者向けに3つ教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

  2. 「ch03 — ファイルに書く」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    💬 ChatGPT 📘 Claude ✨ Gemini

  3. 「ch03 — ファイルに書く」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

🎉 受講お疲れさまでした!

ch03 — ファイルに書く」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE