PHP の file_get_contents と file_put_contents — 手軽な読み書きの基本
PHP でファイルを読み書きする最もシンプルな方法が file_get_contents と file_put_contents だ。ファイルハンドルを開いて閉じるといった手順が不要で、1 行の関数呼び出しだけで完結する。ちょっとした設定ファイルの読み込みやログの追記など、日常的な場面で非常に重宝する。
file_get_contents — ファイルを一括読み込み
file_get_contents はファイルの内容をすべて文字列として返す関数だ。引数にファイルパスを渡すだけで使える。
$content = file_get_contents('data.txt');
echo $content;戻り値はファイル全体の文字列で、読み込みに失敗した場合は false が返る。そのため、実務では戻り値のチェックを入れるのが基本になる。
$content = file_get_contents('data.txt');
if ($content === false) {
echo 'ファイルの読み込みに失敗しました';
} else {
echo $content;
}=== で厳密比較している点がポイントだ。ファイルの中身が空文字列のとき == だと false と区別できなくなる。
file_put_contents — ファイルへの一括書き込み
file_put_contents は文字列をファイルに書き込む関数で、ファイルが存在しなければ自動的に作成される。
file_put_contents('output.txt', 'Hello, PHP!');デフォルトではファイルの内容が上書きされる。既存の内容を残して末尾に追記したい場合は、第 3 引数に FILE_APPEND フラグを指定する。
file_put_contents('log.txt', "エラーが発生\n", FILE_APPEND);戻り値は書き込んだバイト数で、失敗時は false を返す。
既存の内容がすべて消え、新しいデータだけが残る。設定ファイルの更新などに適している。
既存の内容の末尾に追加される。ログファイルへの書き込みなどに適している。
JSON ファイルの読み書き
実務では JSON 形式のデータを扱う場面が多い。file_get_contents と file_put_contents を json_decode / json_encode と組み合わせると、簡単にデータの永続化ができる。
// 書き込み
$data = ['name' => 'Alice', 'age' => 30];
file_put_contents('user.json', json_encode($data, JSON_PRETTY_PRINT));
// 読み込み
$json = file_get_contents('user.json');
$user = json_decode($json, true);
echo $user['name']; // AliceJSON_PRETTY_PRINT を付けると整形された状態で保存されるため、人間が直接ファイルを確認するときに読みやすくなる。
URL からの読み込み
file_get_contents はローカルファイルだけでなく、URL を指定してリモートのコンテンツを取得することもできる。
$html = file_get_contents('https://example.com');
echo $html;ただし、この機能を使うには php.ini で allow_url_fopen が有効になっている必要がある。また、HTTP リクエストのヘッダーやタイムアウトを細かく制御したい場合は、cURL のほうが適している。
API との通信や大量のリクエスト処理には cURL を使うのが一般的で、file_get_contents はちょっとした確認や簡易的な取得に向いている。
PHP に組み込まれた HTTP クライアントライブラリ。ヘッダー設定や POST リクエストなど細かい制御が可能。
注意点
file_get_contents はファイル全体をメモリに読み込むため、巨大なファイルを扱うとメモリ不足になる可能性がある。数百 MB を超えるようなファイルを処理する場合は、fopen と fgets で 1 行ずつ読み込む方法を検討すべきだろう。書き込み側も同様で、大量データを一度に書き込むとメモリを圧迫する。用途に応じて使い分けることが大切だ。