1. 本記事のポイント
- PHPでファイルの読み書きを行う基本構文(fopen/fwrite/fclose)を解説
- 書き込み・読み込み・追記などの操作モードとその使い分けを紹介
- 実務で注意すべきエラー処理やロック制御の考慮点も含めて説明
2. PHPのファイル読み書きとは?
PHPは、サーバーサイドでファイル操作を行うための標準関数群を提供しており、ログ出力や一時データの保存などに活用されます。特にfopen()
、fwrite()
、fclose()
は、ファイルの読み書きを行う上での基本関数です。
これらの関数を使うことで、ファイルの読み込み、書き込み、追記といった処理を柔軟に制御できます。読み書きにはモードの指定が必要で、ファイルを新規作成するのか、既存の内容を追記するのかといった目的によって使い分けます。
実務では、ログファイルへの追記や設定ファイルの読み取り、一時ファイルの作成などに利用される場面が多くあります。読み書きにはファイルの存在チェックや書き込み権限の確認が必要な場合もあり、エラーハンドリングも欠かせません。
3. 詳細解説
基本的な書き込み(新規作成)
ファイルに新しくデータを書き込むには、fopen()
でモード"w"
を指定します。
<?php
// ファイルを新規作成して書き込む
$file = fopen('sample.txt', 'w');
if ($file) {
fwrite($file, "こんにちは、PHPファイル書き込み\n");
fclose($file);
}
?>
この例では、sample.txt
が存在しない場合は新規作成され、存在する場合は中身が上書きされます。書き込み後はfclose()
で必ずファイルを閉じてリソースを解放します。
ファイルへの追記
ログファイルなどで既存内容を保持したまま追加したい場合は、モードに"a"
を使います。
<?php
// 既存ファイルに追記する
$file = fopen('sample.txt', 'a');
if ($file) {
fwrite($file, "この行は追記です\n");
fclose($file);
}
?>
追記モードではファイルの末尾に内容が追加され、元の内容は保持されます。
ファイルの読み込み
読み込みにはモードに"r"
を指定します。読み込んだ内容を変数に格納して処理することが一般的です。
<?php
// ファイルを読み込む
$file = fopen('sample.txt', 'r');
if ($file) {
$content = fread($file, filesize('sample.txt'));
fclose($file);
echo $content;
}
?>
この例では、ファイルの全内容を読み込んで表示しています。ファイルサイズの取得にはfilesize()
関数を使用しています。
fopenのモードと意味の比較
モード | 説明 |
---|---|
r | 読み込み専用 |
w | 書き込み専用(内容上書き) |
a | 書き込み専用(末尾追記) |
r+ | 読み書き(上書き) |
a+ | 読み書き(追記) |
4. よくあるミス・誤解・落とし穴
ファイルが開けない場合の対処をしていない
fopen()
の戻り値がfalse
のままfwrite()
を実行するとエラーになります。必ず戻り値のチェックを入れましょう。
ファイルロックを考慮していない
同時アクセスが発生しうる環境では、flock()
による排他制御を検討する必要があります。
<?php
$file = fopen('sample.txt', 'a');
if ($file && flock($file, LOCK_EX)) {
fwrite($file, "同時アクセス対策\n");
flock($file, LOCK_UN);
fclose($file);
}
?>
相対パスと権限の誤解
Webサーバーの実行ユーザーにファイル書き込み権限がなければ、fopen()
は失敗します。特に相対パスを使う場合、実行ディレクトリと書き込み先の整合性に注意が必要です。
5. まとめ
PHPのファイル操作は、fopen()
、fwrite()
、fclose()
の組み合わせで柔軟に実現できます。読み書きモードを適切に選び、戻り値や権限の確認、同時アクセスへの配慮を行うことで、安全かつ確実なファイル処理が可能になります。