カテゴリ: PHP 更新日: 2025/12/19

初心者向けにPHP でファイルを開く・読み込む・書き込む方法(fopen, fwrite, fread)を解説する記事

PHP でファイルを開く・読み込む・書き込む方法(fopen, fwrite, fread)
PHP でファイルを開く・読み込む・書き込む方法(fopen, fwrite, fread)

新人と先輩の会話形式で理解しよう

新人

「PHPでファイルを操作するには、どうすればいいんですか?」

先輩

「PHPでは、fopenfreadfwriteを使ってファイルを開いたり、読み込んだり、書き込んだりできます。まず、ファイルを開く方法から説明しますね。」

新人

「それでは、ファイルを開く方法を教えてください!」

先輩

「まずは、fopen関数を使ってファイルを開く方法を見てみましょう。」

-

1. PHPでファイル操作をする理由(基本的な説明)

1. PHPでファイル操作をする理由(基本的な説明)
1. PHPでファイル操作をする理由(基本的な説明)

PHPでは、ファイルを開いてその中身を読み取ったり、内容を書き換えたりすることがよくあります。例えば、ユーザーの情報を保存したり、ログを記録したりする場合に必要です。PHPでは、ファイル操作を簡単に行うことができ、これから紹介する関数を使うことで、簡単にファイルを操作できます。

2. PHPのfopen関数の使い方(ファイルを開く)

2. PHPのfopen関数の使い方(ファイルを開く)
2. PHPのfopen関数の使い方(ファイルを開く)

fopen関数を使うと、指定したファイルを開くことができます。ファイルを開く際には、ファイルが存在しているか、書き込み・読み込みができる状態かを指定する必要があります。

例えば、ファイルを読み込み専用で開く場合、次のように記述します。


<?php
$file = fopen("sample.txt", "r");  // "sample.txt"を読み込み専用で開く
if ($file) {
    echo "ファイルが正常に開かれました。";
    fclose($file);  // ファイルを閉じる
} else {
    echo "ファイルを開けませんでした。";
}
?>

このコードでは、fopenを使って「sample.txt」ファイルを開き、成功した場合はメッセージを表示し、最後にファイルを閉じています。ファイルが開けない場合はエラーメッセージを表示します。

3. PHPのfread関数でファイルを読み込む方法

3. PHPのfread関数でファイルを読み込む方法
3. PHPのfread関数でファイルを読み込む方法

fread関数は、開いたファイルからデータを読み込むために使用します。この関数は、ファイルの内容を一度に指定したバイト数だけ読み込むことができます。

例えば、ファイル「sample.txt」から内容を1行ずつ読み込み、表示する場合は以下のように記述します。


<?php
$file = fopen("sample.txt", "r");  // ファイルを読み込み専用で開く
if ($file) {
    // ファイルの内容を1行ずつ読み込んで表示
    while ($line = fread($file, 1024)) {  // 1024バイトずつ読み込み
        echo $line . "<br>";
    }
    fclose($file);  // ファイルを閉じる
} else {
    echo "ファイルを開けませんでした。";
}
?>

このコードでは、freadを使ってファイルから1回に1024バイトずつデータを読み込み、ファイルの内容を表示しています。ファイルを開けたら、ファイルの中身を読み込むことができます。

4. PHPのfwrite関数でファイルに書き込む方法

4. PHPのfwrite関数でファイルに書き込む方法
4. PHPのfwrite関数でファイルに書き込む方法

fwrite関数は、開いたファイルにデータを書き込むために使用します。ファイルが書き込み可能な状態で開かれている場合に利用できます。

例えば、「sample.txt」ファイルに新しい内容を追加する場合、以下のように記述します。


<?php
$file = fopen("sample.txt", "a");  // ファイルを追加モードで開く
if ($file) {
    $text = "新しい行を追加しました。";
    fwrite($file, $text);  // ファイルにデータを書き込む
    fclose($file);  // ファイルを閉じる
    echo "データが正常に書き込まれました。";
} else {
    echo "ファイルを開けませんでした。";
}
?>

このコードでは、fwriteを使って「sample.txt」ファイルに新しいテキストを追加しています。ファイルを「a」モード(追加モード)で開くことで、既存の内容を保持したまま新しいデータを追加できます。

-

5. ファイルを閉じる方法(fclose関数)

5. ファイルを閉じる方法(fclose関数)
5. ファイルを閉じる方法(fclose関数)

fclose関数は、開いたファイルを閉じるために使用します。ファイルの操作が終わったら、必ずファイルを閉じることが重要です。ファイルを閉じることで、リソースが解放され、他のプログラムがそのファイルを使えるようになります。

例えば、ファイルを読み込み後に閉じる場合、次のように記述します。


<?php
$file = fopen("sample.txt", "r");  // ファイルを読み込み専用で開く
if ($file) {
    while ($line = fgets($file)) {  // 1行ずつ読み込み
        echo $line . "<br>";
    }
    fclose($file);  // ファイルを閉じる
    echo "ファイルを正常に閉じました。";
} else {
    echo "ファイルを開けませんでした。";
}
?>

このコードでは、ファイルを読み込んだ後、必ずfcloseでファイルを閉じています。ファイルを閉じることで、後続の処理がスムーズに行えるようになります。

6. PHPでエラーハンドリングをする方法(ファイルが開けない場合)

6. PHPでエラーハンドリングをする方法(ファイルが開けない場合)
6. PHPでエラーハンドリングをする方法(ファイルが開けない場合)

PHPでファイル操作を行う際に、ファイルが存在しない、読み込み・書き込みできないなどのエラーが発生することがあります。こういったエラーを適切に処理することが大切です。PHPでは、fopen関数やその他のファイル操作関数を使用する際に、エラーハンドリングを行うことができます。

例えば、ファイルが開けない場合にエラーメッセージを表示するコードは次のようになります。


<?php
$file = fopen("nonexistent.txt", "r");  // 存在しないファイルを開こうとする
if (!$file) {
    echo "ファイルを開けませんでした。エラー: " . error_get_last()['message'];  // エラーメッセージを表示
} else {
    echo "ファイルが正常に開かれました。";
    fclose($file);  // ファイルを閉じる
}
?>

上記のコードでは、fopenが失敗した場合、error_get_last()関数を使ってエラーメッセージを表示しています。ファイル操作を行う際には、こうしたエラーハンドリングを行うことが重要です。

7. ファイル操作を安全に行うためのベストプラクティス

7. ファイル操作を安全に行うためのベストプラクティス
7. ファイル操作を安全に行うためのベストプラクティス

PHPでファイル操作を安全に行うためには、いくつかのベストプラクティスを守ることが重要です。これらのベストプラクティスを守ることで、予期しないエラーを防いだり、セキュリティリスクを減らしたりすることができます。

1. **ファイルの存在確認**: ファイルを操作する前に、そのファイルが存在するかどうかを確認することが推奨されます。file_exists()関数を使うと、ファイルが存在するかどうかを確認できます。


<?php
if (file_exists("sample.txt")) {
    echo "ファイルは存在します。";
} else {
    echo "ファイルは存在しません。";
}
?>

2. **適切なファイルモードの使用**: ファイルを開く際には、適切なモード(読み込み、書き込み、追加など)を指定することが重要です。誤ったモードで開くと、予期しない結果になることがあります。

3. **エラーハンドリング**: ファイル操作が失敗した場合に備えて、エラーハンドリングを行うことを忘れずに。fopenfwriteの失敗に備え、エラーメッセージを表示するようにします。

4. **ファイルを操作後に必ず閉じる**: ファイルを開いた後は、必ずfcloseでファイルを閉じましょう。これを行わないと、リソースが無駄に消費され、他のプログラムがそのファイルを使えなくなってしまうことがあります。

8. 実際の開発で使えるファイル操作の例(ログファイルの書き込みなど)

8. 実際の開発で使えるファイル操作の例(ログファイルの書き込みなど)
8. 実際の開発で使えるファイル操作の例(ログファイルの書き込みなど)

ファイル操作は、実際の開発でも非常に役立ちます。例えば、ログファイルにエラーメッセージや情報を記録する場合、PHPで簡単にファイル操作を行うことができます。

以下は、エラーログを「error_log.txt」に書き込む例です。実際の開発では、エラーメッセージやユーザーのアクションログを保存するのに役立ちます。


<?php
// エラーメッセージをログファイルに書き込む
$file = fopen("error_log.txt", "a");  // 追加モードで開く
if ($file) {
    $error_message = "エラーが発生しました: " . date("Y-m-d H:i:s") . " - サーバーの問題\n";
    fwrite($file, $error_message);  // ファイルにエラーメッセージを書き込む
    fclose($file);  // ファイルを閉じる
    echo "エラーメッセージがログファイルに書き込まれました。";
} else {
    echo "ログファイルを開けませんでした。";
}
?>

このコードでは、error_log.txtというファイルにエラーメッセージを追記しています。ログファイルは、システムのトラブルシューティングや、ユーザーの行動履歴を追跡するのに非常に役立ちます。

ファイル操作は非常に強力なツールですが、セキュリティやエラーハンドリングに注意して、安全に使うことが大切です。

まとめ

まとめ
まとめ

ここまでの内容をひとつの流れで振り返ると、PHPによるファイル操作は「開く(fopen)→処理する(fread / fwrite)→閉じる(fclose)」という基本の型を丁寧に守ることに尽きます。読み込みではファイルサイズや終端を意識しながら少しずつ扱い、表示前にはhtmlspecialcharsnl2brで整形すると画面が安定します。書き込みでは、追記は"a"、上書きは"w"、必要に応じてflockでロックを挟み、最後は必ずfcloseで後片付けします。加えて、相対パスの基準、フォルダの有無、読み書き権限の確認はつまずきを減らす近道です。ログの記録や設定の保存、CSVの入出力など、日常でよくある処理はすべてこの型の延長で解けます。

実務で頼りになるのは、小さく確実に積み重ねる姿勢です。file_existsis_readableis_writableで事前チェックを入れる、書き込みは一時ファイルに出力してrenameで差し替える、ユーザー入力のファイル名はbasenameで無害化する——こうしたひと手間が、トラブルの芽を早い段階で摘んでくれます。もし失敗したらerror_get_lastで原因を添えて表示し、必要なら警告を例外化してtry/catchでまとめて扱うと、原因の切り分けが楽になります。最初はシンプルなログ追記から始め、だんだんとフォーマットやローテーション、CSVの検証などを足していけば、堅実で見通しのよいコードに育っていきます。

小さなサンプル:安全に1行ログを積み上げる

<?php
// 日毎にログを分けて肥大化を防止
$log = __DIR__ . "/logs/app_" . date("Ymd") . ".log";

// フォルダが無ければ作成
$dir = dirname($log);
if (!is_dir($dir)) {
    mkdir($dir, 0775, true);
}

// 追記モードで開く
$fp = fopen($log, "a");
if ($fp === false) {
    $err = error_get_last();
    echo "ログを開けませんでした: " . ($err["message"] ?? "原因不明");
    return;
}

// ロックしてから1行だけ書く
if (flock($fp, LOCK_EX)) {
    $msg  = "ファイル操作の確認が完了しました。";
    $line = sprintf("%s\tINFO\t%s%s",
        date("Y-m-d H:i:s"),
        str_replace(["\r", "\n"], " ", $msg),
        PHP_EOL
    );
    fwrite($fp, $line);
    flock($fp, LOCK_UN);
}
fclose($fp);

echo "ログに記録しました。";
?>
ポイント1行の体裁(時刻・区分・本文)を固定すると、あとで検索や集計がしやすくなります。
注意表示に出す文字列はhtmlspecialcharsで無害化、ファイル名はbasenameで安全に。
先生と生徒の振り返り会話

生徒「きょうの学びは、開く・処理する・閉じるの順番を体で覚えることでした。読み込みは少しずつ、表示前に整形、でしたよね。」

先生「その通り。書き込みはfwriteに加えてflockで衝突を防ぐ、最後は必ずfclose。小さく確実に、が合言葉だ。」

生徒「失敗したときはerror_get_lastで原因を添えると追跡が楽、というのも実感しました。ログは日付で分けると読みやすいですね。」

先生「うん。次は同じ型でCSVや設定ファイルも扱ってみよう。今日のコードをベースに、少しずつ拡張すれば大丈夫。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

PHPでファイル操作を学ぶときに最初に覚えるべき基本の流れは何ですか

PHPのファイル操作は開く処理を行う段階でファイルを指定し読み込みや書き込みや追記の目的に合う方法を選び最後に閉じるまでを一連で覚えると理解が進みます。具体的にはファイルを開く動作でモードの種類を意識し読み取りでは内容を安全に取り出し書き込みでは必要に応じて末尾へ追加し最後に閉じて資源を解放する手順を守ることが重要です。この基礎を身につけるとログの記録や設定の保存や簡単なデータ蓄積など幅広い場面に応用できます。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
PHP
PHPのCookieセキュリティを完全ガイド!初心者でもわかるSecureとHttpOnlyの使い方
New2
PHP
PHPのCSRF対策を完全理解!トークンを使った安全なフォーム送信の仕組みを初心者向けに徹底解説
New3
PHP
PHPのSQLインジェクション対策を完全解説!初心者でも安全にデータベースを扱う方法
New4
PHP
PHPでカウントダウンタイマーを作る方法!初心者向けにやさしく解説
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.2
Java&Spring記事人気No2
PHP
初心者向けPHPでMySQLからデータを取得する方法(SELECT文)完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonのリストの重複を削除する方法を解説!初心者向けにsetとdict.fromkeysの使い方をやさしく説明
No.4
Java&Spring記事人気No4
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.5
Java&Spring記事人気No5
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.6
Java&Spring記事人気No6
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.7
Java&Spring記事人気No7
PHP
PHPのOAuth認証をやさしく解説!Google・Facebookログインを初心者向けに実装しよう
No.8
Java&Spring記事人気No8
PHP
PHPのXSS対策を完全ガイド!初心者でもわかる安全なWebアプリの作り方
-
-