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

作成日: 更新日:

get_included_files関数は、PHPスクリプト内でインクルードまたはrequireされたすべてのファイルの名前の配列を返す関数です。具体的には、includeinclude_oncerequirerequire_onceといった関数によって読み込まれたファイルパスが、配列の要素として格納されます。この関数は引数を取らず、スクリプトが実行された時点までにインクルードされたファイルのリストを返します。

システムエンジニアを目指す初心者の方にとって、この関数は、大規模なプロジェクトや複数のファイルに分割されたプログラムの依存関係を把握する上で非常に役立ちます。例えば、特定の機能がどのように実装されているか調査する際に、どのファイルが関連しているのかを特定したり、不要なファイルのインクルードを検出してパフォーマンスを改善したりすることができます。

また、この関数は、デバッグやテストの際にも有効です。インクルードされたファイルのリストを確認することで、意図しないファイルの読み込みや、ファイルの重複読み込みなどを発見できます。これにより、予期せぬエラーやバグの発生を未然に防ぐことが可能になります。

get_included_files関数は、スクリプト実行時に動的にインクルードされたファイルの情報のみを取得します。そのため、事前にファイルがインクルードされているかどうかを静的にチェックしたい場合には、他の方法を検討する必要があります。しかし、実行時のファイル依存関係を把握する上では、非常に有用な関数であると言えるでしょう。

基本的な使い方

構文(syntax)

<?php
$included_files = get_included_files();
print_r($included_files);
?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

array

この関数は、現在実行されているスクリプトでインクルードまたはリクエストされたすべてのファイルのパスを配列で返します。

サンプルコード

PHPでincludeされた全ファイルを取得する

<?php

/**
 * get_included_files() の使用例を示します。
 *
 * このスクリプトは、デモンストレーションのために2つのPHPファイルを動的に作成し、
 * それらをインクルード(require_once, include_once)します。
 * その後、get_included_files() を呼び出して、現在読み込まれている
 * すべてのファイルの絶対パスを配列として取得し、画面に表示します。
 * 実行後、作成した一時ファイルは自動的に削除されます。
 */
function demonstrateGetIncludedFiles(): void
{
    // デモ用の一時ファイル名
    $tempFile1 = __DIR__ . '/temp_helper_file_1.php';
    $tempFile2 = __DIR__ . '/temp_helper_file_2.php';

    // 一時ファイルを作成
    file_put_contents($tempFile1, '<?php // Helper file 1');
    file_put_contents($tempFile2, '<?php // Helper file 2');

    // 作成したファイルを読み込む
    require_once $tempFile1;
    include_once $tempFile2;

    // include や require によって読み込まれた全てのファイルの一覧を取得する
    // このスクリプトファイル自身のパスも配列に含まれる
    $includedFiles = get_included_files();

    // 結果を整形して出力
    echo "--- Included Files ---" . PHP_EOL;
    foreach ($includedFiles as $index => $filePath) {
        // 配列のインデックスとファイルパスを表示
        echo "[" . $index . "] " . $filePath . PHP_EOL;
    }
    echo "----------------------" . PHP_EOL;

    // 後片付けとして一時ファイルを削除
    unlink($tempFile1);
    unlink($tempFile2);
}

// 関数を実行して結果を表示
demonstrateGetIncludedFiles();

get_included_files()関数は、PHPスクリプトの実行中に読み込まれた全てのファイルのパスを一覧で取得するために使用します。この関数は引数を必要とせず、呼び出すだけで動作します。

戻り値として、includeinclude_oncerequirerequire_onceといった命令文によって読み込まれた全てのファイルの絶対パスが格納された配列を返します。この配列には、現在実行しているスクリプトファイル自身のパスも含まれるという特徴があります。

サンプルコードでは、まずfile_put_contents()を使ってデモンストレーション用のPHPファイルを2つ動的に作成しています。次に、require_onceinclude_onceを使ってこれらのファイルをスクリプトに読み込みます。その後get_included_files()を呼び出すことで、実行中のメインスクリプトと先ほど読み込んだ2つのファイルの、合計3つのファイルパスが配列として取得されます。最後に、foreachループでこの配列の内容を画面に表示し、unlink()で作成した一時ファイルを削除して処理を終えています。この関数は、どのファイルが読み込まれているかを確認するデバッグ作業などで役立ちます。

get_included_files()関数は、includerequireで読み込まれたすべてのファイルの絶対パスを配列で返します。注意点として、この配列には実行中のスクリプト自身のファイルパスも必ず含まれます。また、この関数が呼び出されるタイミングによって結果が変わり、include文より前に実行した場合、そのファイルはリストに含まれません。この関数は主にデバッグ目的で利用します。返されるのはサーバー内部のパス情報なので、そのまま画面に出力するとサーバーのファイル構成が外部に漏洩するセキュリティ上のリスクがあるため、取り扱いには十分な注意が必要です。

PHP get_included_files で読み込みファイル一覧を表示する

<?php

declare(strict_types=1);

/**
 * get_included_files() の使用例を示します。
 *
 * この関数は、スクリプトの実行中に include, include_once, require, require_once
 * によって読み込まれた全てのファイルのパスを配列で返します。
 *
 * このサンプルでは、実行時に一時的なファイルを作成して 'require' し、
 * どのファイルが読み込まれたかを確認します。
 */
function displayIncludedFiles(): void
{
    // --- 準備: インクルードするための一時ファイルを作成 ---
    $tempFileName = 'temporary_include_file.php';
    $fileContent = "<?php\n// これは一時的なヘルパーファイルです。\n";

    // file_put_contents は、ファイルにデータを書き込みます。
    // ファイルが存在しない場合は新規作成されます。
    file_put_contents($tempFileName, $fileContent);


    // --- 実行: 作成したファイルを読み込む ---
    // これにより、読み込まれたファイルのリストに $tempFileName が追加されます。
    require_once $tempFileName;


    // --- 確認: 読み込まれたファイルの一覧を取得して表示 ---
    // get_included_files() は、実行スクリプト自身と、require/includeされた
    // ファイルの絶対パスを配列で返します。
    $includedFiles = get_included_files();

    echo '現在インクルードされているファイル:' . PHP_EOL;
    // print_r() は、配列の内容を人間が読みやすい形式で出力します。
    print_r($includedFiles);


    // --- 後片付け: 作成した一時ファイルを削除 ---
    unlink($tempFileName);
}

// 関数を実行します
displayIncludedFiles();

get_included_files()関数は、PHPスクリプトの実行中に includeinclude_oncerequirerequire_once などによって読み込まれた全てのファイルのパスを配列として取得します。この関数は引数を必要としません。戻り値として、実行中のスクリプト自身のパスと、インクルードされた全てのファイルの絶対パスが格納された配列を返します。

サンプルコードでは、まず file_put_contents() を使って一時的なPHPファイルを作成し、次に require_once でそのファイルをスクリプトに読み込ませています。これにより、get_included_files() が返すリストに、この一時ファイルが追加される状況を作り出しています。

その後、get_included_files() を呼び出して、現在読み込まれているファイルの一覧を取得し、print_r() を使ってその配列の内容を画面に表示しています。出力結果には、このサンプルコード自身のファイルパスと、プログラム内で作成・読み込みされた一時ファイルのパスが含まれていることが確認できます。最後に unlink() で不要になった一時ファイルを削除して処理を終了します。この関数は、デバッグ時などにスクリプトの依存関係を確認するのに役立ちます。

get_included_files()が返す配列には、includerequireで読み込んだファイルだけでなく、実行しているスクリプト自体のファイルも含まれる点に注意してください。この関数は呼び出すタイミングによって結果が変わり、その時点までに読み込まれたファイルの一覧を返します。返されるパスは通常、絶対パスになるため、ファイルシステム上の正確な位置が分かります。主に、意図しないファイルが読み込まれていないか、あるいは必要なファイルが正しく読み込まれているかを確認するデバッグ目的で使われます。Composerなどオートローダーを利用している環境では、クラスが使用されるタイミングで動的にファイルが読み込まれるため、実行箇所によって結果が異なる場合があります。

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