呼び出す前に include / require_once が存在するかどうかを確認するにはどうすればよいですか、エラーブロックに入れてみましたが、PHPはそれが好きではありませんでした。
file_exists()
多少の努力でうまくいくと思いますが、それにはファイルパス全体が必要であり、相対インクルードを簡単に渡すことができませんでした。
他の方法はありますか?
file_exists
これらの線に沿って何かを試すこともできますが、相対パスで動作すると思います...
if(!@include("script.php")) throw new Exception("Failed to include 'script.php'");
... 言うまでもなく、選択したエラー処理方法の代わりに例外を使用できます。ここでの考え方は、if
- ステートメントがファイルを含めることができるかどうかを検証し、 によって通常出力されるエラー メッセージはinclude
、プレフィックスを付けることで抑制されるというもの@
です。
stream_resolve_include_path 関数を確認してください。include() と同じルールで検索します。
http://php.net/manual/en/function.stream-resolve-include-path.php
インクルード ファイルで定義されている変数、関数、またはクラスをチェックして、インクルードが機能したかどうかを確認することもできます。
if (isset($variable)) { /*code*/ }
また
if (function_exists('function_name')) { /*code*/ }
また
if (class_exists('class_name')) { /*code*/ }
file_exists
相対パスで正常に機能するため、現在の作業ディレクトリに相対的な場合に必要なファイルが存在するかどうかを確認できます。ただし、インクルードファイルがPATHの他の場所にある場合は、いくつかのパスを確認する必要があります。
function include_exists ($fileName){
if (realpath($fileName) == $fileName) {
return is_file($fileName);
}
if ( is_file($fileName) ){
return true;
}
$paths = explode(PS, get_include_path());
foreach ($paths as $path) {
$rp = substr($path, -1) == DS ? $path.$fileName : $path.DS.$fileName;
if ( is_file($rp) ) {
return true;
}
}
return false;
}
file_exists()
相対パスで動作し、ディレクトリが存在するかどうかもチェックします。is_file()
代わりに使用してください:
if (is_file('./path/to/your/file.php'))
{
require_once('./path/to/your/file.php');
}