PHPでは、外部ファイルを導入するために含まれるか、必要な場合がよくあります。これらの関数が複数のディレクトリでファイルを見つけることを可能にするために、PHPはインクルードパスメカニズムを提供します。 get_include_path()関数は、currentを含むパスを取得するのに役立ち、 file_exists()関数を使用すると、これらのパスにファイルが存在するかどうかを判断できます。
この記事では、get_include_path()とfile_exists()を使用する方法を紹介して、PHPにファイルが存在するかどうかを判断し、実際のコード例を提供します。
PHPのget_include_path()関数オペレーティングシステムで定義されたデリミターによって複数のパスで区切られたパスで構成される文字列を返します。
UNIX/Linuxシステムでは、パスセパレーターは次のとおりです。
Windowsシステムでは、パスセパレーターは次のとおりです。
これらのパスは、 PHPエンジンが実行時にファイルを検索するディレクトリです。
例えば:
echo get_include_path();
出力は次のとおりです。
.:/usr/share/php:/usr/local/lib/php
file_exists()は、含まれているパスを自動的に検索できないため(指定されたパスが存在するかどうかを確認するだけです)、含まれているパスを分解し、各ディレクトリをターゲットファイル名と手動で組み合わせて、 file_exists()を1つずつチェックする必要があります。
次の関数file_exists_in_include_path($ filename)がこの機能を実装します。
function file_exists_in_include_path($filename) {
$paths = explode(PATH_SEPARATOR, get_include_path());
foreach ($paths as $path) {
$fullPath = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $filename;
if (file_exists($fullPath)) {
return $fullPath;
}
}
return false;
}
このように使用できます。
$filename = 'config/settings.php';
$result = file_exists_in_include_path($filename);
if ($result !== false) {
echo "ファイルは、インクルードパスにあります,フルパスはです: " . $result;
} else {
echo "ファイルは含まれていません。";
}
大規模なプロジェクトにいるとしたら、構成ファイルは別のディレクトリに配置され、これらのディレクトリはすべてinclude_pathに追加されます。警告メッセージを避けるために、ファイルが存在する前に存在するかどうかを確認し、現時点では上記の機能を使用できます。
例えば:
$filename = 'lib/MyClass.php';
if ($path = file_exists_in_include_path($filename)) {
include $path;
} else {
error_log("書類 $filename インクルードパスには存在しません");
}
set_include_path()を使用して、スクリプトにパスを動的に追加することもできます。
set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/gitbox.net/includes');
get_include_path()を介して含まれるすべてのパスを取得し、ファイルがfile_exists()に存在するかどうかを確認します。これにより、プログラムの柔軟性と堅牢性が向上します。特に、複数のディレクトリと複雑なファイル構造を含むプロジェクトでは、このアプローチは不必要なエラーを効果的に回避し、より明確なデバッグ情報を提供できます。