【PHP8.x】file関数の使い方

file関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

file関数は、ファイル全体を1つの文字列として読み込む関数です。ファイルの内容を簡単に変数に格納したい場合に便利です。

この関数は、指定されたファイル名を引数に取り、ファイルの内容を文字列として返します。ファイルが存在しない場合や、読み込みに失敗した場合は、falseを返します。

file関数は、主に以下の用途で使用されます。

  • 設定ファイルの読み込み: 設定ファイルの内容を文字列として読み込み、解析して設定値を取得します。
  • テンプレートエンジンの実装: テンプレートファイルを読み込み、変数などを埋め込んでHTMLなどの出力を作成します。
  • テキストファイルの簡単な処理: テキストファイルの内容を読み込み、検索や置換などの処理を行います。

file関数を使用する際には、以下の点に注意する必要があります。

  • 大きなファイルを読み込む場合、メモリを大量に消費する可能性があります。そのような場合は、fopenfreadfcloseなどの関数を使用して、ファイルを少しずつ読み込むことを検討してください。
  • ファイルパスは、相対パスまたは絶対パスで指定できます。相対パスは、現在のスクリプトの実行場所からの相対位置を表します。
  • ファイルの内容によっては、文字コードの問題が発生する可能性があります。必要に応じて、mb_convert_encodingなどの関数を使用して、文字コードを変換してください。

file関数は、ファイルの内容を文字列として簡単に読み込むことができる便利な関数ですが、メモリ消費量や文字コードの問題に注意して使用する必要があります。

構文(syntax)

1file ( string $filename , int $flags = 0 , resource $context = null ) : array|false

引数(parameters)

string $filename, int $flags = 0, $context = null

  • string $filename: 読み込むファイルの名前またはパスを指定する文字列
  • int $flags = 0: ファイルの読み込み方法を制御するフラグを指定する整数。デフォルトは0(通常の読み込み)
  • $context = null: ストリームコンテキストを指定する。通常は null で指定しない

戻り値(return)

array|false

file() 関数は、指定されたファイルの内容を配列として返します。ファイルの読み込みに失敗した場合は false を返します。

サンプルコード

PHP file() 関数でファイルを行ごとに読み込む

1<?php
2
3// このスクリプトは、PHPの `file()` 関数を使ってファイルの内容を読み込む方法を示します。
4// `file()` 関数は、ファイル全体を配列として読み込みます。配列の各要素はファイルの1行に対応します。
5
6// 1. デモンストレーション用のダミーファイルを作成します。
7$filename = 'sample_data.txt';
8$fileContent = "こんにちは、PHP!\nこれはテストファイルです。\n3行目のデータ。";
9
10// ファイルの作成が成功したかを確認します。
11if (file_put_contents($filename, $fileContent) === false) {
12    // ファイル作成に失敗した場合、エラーメッセージを出力して終了します。
13    die("エラー: デモンストレーション用のファイル '{$filename}' を作成できませんでした。\n");
14}
15
16echo "デモンストレーション用にファイル '{$filename}' を作成しました。\n";
17echo "--- ファイル内容 ---\n{$fileContent}\n--------------------\n\n";
18
19// 2. `file()` 関数を使ってファイルの内容を読み込みます。
20// デフォルトの挙動 (flags = 0) では、各行の末尾の改行文字も配列の要素に含まれます。
21$linesArray = file($filename);
22
23// 3. 関数呼び出しが成功したかを確認します。
24if ($linesArray === false) {
25    // ファイルの読み込みに失敗した場合、エラーメッセージを出力します。
26    echo "エラー: ファイル '{$filename}' の読み込みに失敗しました。\n";
27} else {
28    // 成功した場合、読み込んだ内容を表示します。
29    echo "`file()` 関数を使ってファイル '{$filename}' を正常に読み込みました。\n";
30    echo "関数は " . count($linesArray) . " 個の要素を持つ配列を返しました。\n\n";
31    echo "配列の内容:\n";
32
33    // 配列の各要素(行)を順番に表示します。
34    foreach ($linesArray as $index => $line) {
35        // `rtrim()` を使うことで、表示の際に各行の末尾にある改行文字や余分な空白を除去し、
36        // コンソール出力を見やすくしています。ただし、元の配列要素には改行文字が含まれたままです。
37        echo "要素 [" . $index . "]: '" . rtrim($line) . "' (元の長さ: " . strlen($line) . " バイト)\n";
38    }
39
40    echo "\n補足: `file()` 関数はデフォルトで各行の改行文字を含みます。\n";
41    echo "      `FILE_IGNORE_NEW_LINES` や `FILE_SKIP_EMPTY_LINES` などのフラグを使用することで、\n";
42    echo "      改行文字を除去したり、空行をスキップしたりできます。\n";
43}
44
45// 4. デモンストレーション用に作成したファイルを削除してクリーンアップします。
46if (file_exists($filename)) {
47    unlink($filename);
48    echo "\nファイル '{$filename}' を削除しました。\n";
49}
50
51?>

PHPのfile()関数は、指定されたファイルの内容を、各行を配列の要素として読み込むための関数です。第一引数$filenameには、読み込みたいファイルのパスを文字列で指定します。成功した場合、ファイルの各行を要素とする配列が返されます。デフォルトでは、この配列の各要素には行末の改行文字も含まれます。

第二引数$flagsはオプションで、ファイルの読み込み方法を制御します。例えば、FILE_IGNORE_NEW_LINESフラグを指定すると各行の改行文字を除去したり、FILE_SKIP_EMPTY_LINESフラグで空行をスキップしたりできます。ファイルの読み込みに失敗した場合はfalseが返されます。

このサンプルコードでは、まずfile_put_contents()関数を使ってダミーのテキストファイルを作成し、その内容をfile()関数で読み込んでいます。読み込まれた内容は配列として取得され、foreachループを使って各行のデータとその長さを表示しています。表示の際にはrtrim()関数で改行文字を一時的に除去し、コンソールでの視認性を高めています。最後に、デモンストレーション用に作成したファイルを削除してクリーンアップを行っています。

file()関数は、ファイルを一行ずつ読み込み、各行を配列の要素として返します。ファイル読み込みに失敗した場合はfalseを返すため、必ず戻り値がfalseでないかを確認してください。デフォルトでは、各行の末尾にある改行文字(\n)も配列要素に含まれる点に注意が必要です。改行文字が不要な場合はFILE_IGNORE_NEW_LINESフラグを使用するか、rtrim()関数などで後処理をしてください。また、FILE_SKIP_EMPTY_LINESフラグで空行をスキップできます。非常に大きなファイルを読み込むと、ファイル全体がメモリに展開されるため、システムメモリを大量に消費する可能性があります。外部からの入力でファイルパスを指定する際は、セキュリティのためパスの検証を徹底してください。

PHP file_put_contentsでファイルに書き込む

1<?php
2
3declare(strict_types=1);
4
5/**
6 * 指定されたファイルにコンテンツを書き込みます。
7 *
8 * file_put_contents関数は、ファイルに文字列データを書き込むための推奨される方法です。
9 * ファイルが存在しない場合は新しく作成され、存在する場合はデフォルトでその内容を上書きします。
10 * 成功した場合は書き込まれたバイト数を整数で返し、失敗した場合はfalseを返します。
11 *
12 * @param string $filename 書き込み対象のファイルパス。
13 * @param string $data ファイルに書き込む文字列データ。
14 * @param int $flags 追加の動作を指定するフラグ (例: FILE_APPENDで既存ファイルに追記、0で上書き)。
15 * @return void
16 */
17function writeToFile(string $filename, string $data, int $flags = 0): void
18{
19    // file_put_contents関数を使用してファイルにコンテンツを書き込む。
20    // 第1引数: ファイルパス ($filename)
21    // 第2引数: 書き込むデータ ($data)
22    // 第3引数 (省略可能): フラグ ($flags)。省略時は0となり、既存ファイルを上書きします。
23    $bytesWritten = file_put_contents($filename, $data, $flags);
24
25    // 書き込みの成否をチェック。
26    // 成功すると書き込まれたバイト数 (0以上の整数) を返し、失敗すると false を返します。
27    if ($bytesWritten !== false) {
28        echo "ファイル '{$filename}' に {$bytesWritten} バイト書き込みました。\n";
29        echo "ファイルの内容を確認するには、ターミナルで 'cat {$filename}' コマンドを実行してください。\n";
30    } else {
31        // 書き込みに失敗した場合のエラーメッセージ。
32        // 例: ディレクトリへの書き込み権限がない場合や、パスが無効な場合など。
33        echo "エラー: ファイル '{$filename}' への書き込みに失敗しました。\n";
34    }
35}
36
37// --- サンプル使用例 ---
38
39// 1. 新しいファイルを作成し、内容を書き込む (デフォルト動作: 上書き)
40$sampleFilename1 = 'my_first_document.txt';
41$sampleContent1 = "Hello, PHP file_put_contents!\n";
42$sampleContent1 .= "This is a test line for writing content to a file.\n";
43writeToFile($sampleFilename1, $sampleContent1);
44
45echo "\n"; // 出力を見やすくするための改行
46
47// 2. 既存のファイルに追記する例 (FILE_APPENDフラグを使用)
48// この場合、'my_first_document.txt' の既存の内容に新しい内容が追加されます。
49$sampleFilename2 = 'my_first_document.txt'; // 既存のファイルを指定
50$sampleContent2 = "--- Appended Content ---\n";
51$sampleContent2 .= "This line was added using the FILE_APPEND flag.\n";
52writeToFile($sampleFilename2, $sampleContent2, FILE_APPEND);
53
54echo "\n"; // 出力を見やすくするための改行
55
56// 3. 別のファイルに現在のタイムスタンプを書き込む例
57$logFilename = 'application.log';
58$logContent = date('Y-m-d H:i:s') . " - Application started successfully.\n";
59writeToFile($logFilename, $logContent, FILE_APPEND); // ログファイルは追記が一般的
60
61// 例: 後で作成したファイルを削除したい場合 (このサンプルコードには含まれませんが参考として)
62// unlink('my_first_document.txt');
63// unlink('application.log');
64

PHP 8で利用できるfile_put_contents関数は、指定されたファイルにデータを書き込むための便利な機能です。この関数は、ファイルが存在しない場合は新しく作成し、既存のファイルがある場合は、その内容をデフォルトで上書きします。

引数としては、最初に「$filename」で操作したいファイルのパスを文字列で指定します。次に「$data」としてファイルに書き込む文字列の内容を渡します。そして、省略可能な「$flags」には、FILE_APPENDのような追加の動作を制御する整数値を設定できます。例えば、FILE_APPENDフラグを指定すると、既存の内容を保持したまま末尾に追記されますが、このフラグを指定しない(または0を指定する)場合はファイル全体が上書きされます。

関数が正常に実行されると、ファイルに書き込まれたバイト数を示す整数値が戻り値として返されます。しかし、書き込みに失敗した場合はfalseが返されるため、サンプルコードのように戻り値をチェックして処理の成否を確認することが大切です。この関数は、ログの記録や設定ファイルの保存など、さまざまな場面でファイルの書き込み処理に活用されます。

file_put_contents関数は、デフォルトで既存のファイルを上書きするため、誤って重要なデータを消去しないよう注意が必要です。ファイルに内容を追記したい場合は、第3引数にFILE_APPENDフラグを指定してください。ファイル書き込みの成否は、戻り値がfalseかどうかで必ず確認し、失敗時には適切なエラーハンドリングを行うことが重要です。また、指定したファイルパスのディレクトリにPHPを実行しているユーザーからの書き込み権限があることを事前に確認してください。権限がない場合や無効なパスでは、ファイルへの書き込みは失敗します。

関連コンテンツ

【PHP8.x】file関数の使い方 | いっしー@Webエンジニア