現在の位置: ホーム> 最新記事一覧> phpのget_include_path()とinclude()の間の競合の問題を解決する

phpのget_include_path()とinclude()の間の競合の問題を解決する

gitbox 2025-05-29

PHPを使用して開発する場合、 get_include_path()include()は、しばしば一緒に表示される2つの関数です。ただし、場合によっては、開発者が混乱する問題に遭遇する可能性があります。Pathはcontruct_pathに追加されていますが、 conter()を使用してファイルを見つけることはできません。この「紛争」は、実際にはいくつかの一般的な理由によって引き起こされます。この記事では、ソリューションを1つずつ分析および提供します。

1。get_include_path ()include()の関係を理解する

phpのinclude()関数は、指定されたファイルを次の順序で探します。

  1. 相対パスを使用します(現在のファイルのディレクトリに対する)

  2. 現在のスクリプトが配置されているディレクトリを見つけます

  3. include_pathで構成されたパスを繰り返します

get_include_path()は、current include_path構成を取得するためのツールです。これを使用して、現在の設定を表示できます。

 echo get_include_path();

また、 set_include_path()を介してinclude_pathを動的に変更することもできます。

 set_include_path(get_include_path() . PATH_SEPARATOR . '/usr/local/lib/php');

2。よくある質問と紛争

質問1:include_pathにパスが正しく追加されていません

set_include_path()が呼び出されることもありますが、パスは実際には追加されていません。一般的なエラーは次のとおりです。

 set_include_path('/some/path');
set_include_path('/another/path'); // 前の設定を上書きします

解決:

Path_separatorを使用して、上書きの代わりにパスを追加します。

 set_include_path(get_include_path() . PATH_SEPARATOR . '/another/path');

質問2: include()相対パスを使用してオーバーライドする

include( 'config/config.php')が呼び出される場合、 config/config.phpが既にinclude_pathにある場合でも、PHPは現在のスクリプトディレクトリに従って最初に検索を開始します。現在のディレクトリ構造が正しくない場合、「ファイルが見つかっていない」というエラーも発生します。

解決:

パスのディレクトリパーツを削除し、 include_pathを有効にします。例えば:

 include('config.php'); // config.php すでにここに include_path パスで

質問3:ファイルが実際に存在しないか、許可が不十分である

include_pathが正しく設定されていても、ファイルが存在しないか、読み取り権限がない場合でも失敗します。

トラブルシューティングの提案:

  • ファイルパスが正しいことを確認するには、コマンドラインのlsまたはfile_exists()でそれを確認することを試みることができます。

 echo file_exists('/path/to/config.php') ? 'found' : 'not found';
  • PHPユーザーが許可を読み取っていることを確認するには、サーバーの許可設定を確認してください。

問題4:ファイルを含むURLを使用する場合、構成は有効になりません

PHPは、次のようなURLを介したリモートファイルを含むサポートをサポートしています。

 include('http://gitbox.net/includes/header.php');

この関数は、2つの構成項目Allow_url_includeaopl_url_fopenに依存しており、多くのサーバーはデフォルトで閉じた状態にあります。

解決:

これらの設定をphp.iniで有効にします:

 allow_url_fopen = On
allow_url_include = On

ただし、セキュリティ上の理由から、特にHTTPプロトコルを使用して、生産環境にURLを含めることを有効にすることは推奨されません。

3。推奨される練習

  • 絶対パスを使用するか、 __dir__定数を使用して相対パスを構築してください。

     include(__DIR__ . '/includes/config.php');
    
  • include_pathの使用AutoloadまたはFrameworkの使用:最新のフレームワークは通常、PSR-4などの自動負荷メカニズムを使用して、クラスファイルの配置場所を自動的に見つけ、マニュアルにエラーを含めないようにします。

  • 展開段階でのテストを含む_Pathの設定:開発環境と生産環境の経路はしばしば異なります。オンラインになる前に完全なパステストを行うことをお勧めします。

要約します

get_include_path()はinclude()と競合しませんが、それを使用する間違った方法は、それらが「戦い」のように見えます。検索メカニズムと読み込み順序を理解することは、問題を解決するための鍵です。 comationally include_pathの設定により、書き込みはパスを正しく含み、リモートファイルを含むためのURLの使用を回避するため、コードの堅牢性とセキュリティを大幅に改善できます。