51

呼び出す前に include / require_once が存在するかどうかを確認するにはどうすればよいですか、エラーブロックに入れてみましたが、PHPはそれが好きではありませんでした。

file_exists()多少の努力でうまくいくと思いますが、それにはファイルパス全体が必要であり、相対インクルードを簡単に渡すことができませんでした。

他の方法はありますか?

4

6 に答える 6

61

file_existsこれらの線に沿って何かを試すこともできますが、相対パスで動作すると思います...

if(!@include("script.php")) throw new Exception("Failed to include 'script.php'");

... 言うまでもなく、選択したエラー処理方法の代わりに例外を使用できます。ここでの考え方は、if- ステートメントがファイルを含めることができるかどうかを検証し、 によって通常出力されるエラー メッセージはinclude、プレフィックスを付けることで抑制されるというもの@です。

于 2010-02-12T14:57:14.850 に答える
11

stream_resolve_include_path 関数を確認してください。include() と同じルールで検索します。

http://php.net/manual/en/function.stream-resolve-include-path.php

于 2012-10-29T08:25:34.907 に答える
10

インクルード ファイルで定義されている変数、関数、またはクラスをチェックして、インクルードが機能したかどうかを確認することもできます。

if (isset($variable)) { /*code*/ }

また

if (function_exists('function_name')) { /*code*/ }

また

if (class_exists('class_name')) { /*code*/ }
于 2012-05-29T10:55:18.270 に答える
6

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;
}
于 2010-02-12T15:02:27.020 に答える
5

file_exists()相対パスで動作し、ディレクトリが存在するかどうかもチェックします。is_file()代わりに使用してください:

if (is_file('./path/to/your/file.php'))
{
    require_once('./path/to/your/file.php');
}
于 2010-02-12T15:17:00.553 に答える