PHP の file_get_contents と file_put_contents — 手軽な読み書きの基本

PHP でファイルを読み書きする最もシンプルな方法が file_get_contentsfile_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 を返す。

上書きモード(デフォルト)

既存の内容がすべて消え、新しいデータだけが残る。設定ファイルの更新などに適している。

追記モード(FILE_APPEND)

既存の内容の末尾に追加される。ログファイルへの書き込みなどに適している。

JSON ファイルの読み書き

実務では JSON 形式のデータを扱う場面が多い。file_get_contentsfile_put_contentsjson_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']; // Alice

JSON_PRETTY_PRINT を付けると整形された状態で保存されるため、人間が直接ファイルを確認するときに読みやすくなる。

URL からの読み込み

file_get_contents はローカルファイルだけでなく、URL を指定してリモートのコンテンツを取得することもできる。

$html = file_get_contents('https://example.com');
echo $html;

ただし、この機能を使うには php.iniallow_url_fopen が有効になっている必要がある。また、HTTP リクエストのヘッダーやタイムアウトを細かく制御したい場合は、cURL のほうが適している。

API との通信や大量のリクエスト処理には cURL を使うのが一般的で、file_get_contents はちょっとした確認や簡易的な取得に向いている。

PHP に組み込まれた HTTP クライアントライブラリ。ヘッダー設定や POST リクエストなど細かい制御が可能。

注意点

file_get_contents はファイル全体をメモリに読み込むため、巨大なファイルを扱うとメモリ不足になる可能性がある。数百 MB を超えるようなファイルを処理する場合は、fopenfgets で 1 行ずつ読み込む方法を検討すべきだろう。書き込み側も同様で、大量データを一度に書き込むとメモリを圧迫する。用途に応じて使い分けることが大切だ。