質問
いまチェックがするようになりますのでrequire_onceが存在するお問い合わせ頂く前に、これまでのみ記載しておくことは、エラーブロック、PHPなかったというのに。
と思い file_exists()
うと努力したことにとって必要であることが分かっ全ファイルのパスを、相対的に含まれない渡された。
はありまょうか?
解決
私はあなたにも、これらの線に沿って何かを試みることができるもののfile_exists
は、相対パスでは動作しないと信じて...
if(!@include("script.php")) throw new Exception("Failed to include 'script.php'");
...言うまでもなく、あなたはあなたが選んだのいずれかのエラー処理方法のための例外を代えることができます。ここでの考え方はif
-文は、ファイルが含まれることができるかどうかを確認し、通常include
によって出力されたエラーメッセージが@
でそれを付けることによってsupressedされていることである。
他のヒント
また、すべての変数、関数やインクルードファイルで定義されたクラスをチェックし、含ま働いていたかどうかを確認することができます。
if (isset($variable)) { /*code*/ }
または
if (function_exists('function_name')) { /*code*/ }
または
if (class_exists('class_name')) { /*code*/ }
、stream_resolve_include_path機能をチェックしてください ()
含むように、同じルールで検索しますhttp://php.net/manual/en/function.stream-resolve -include-path.phpする
file_exists
は、それが相対パスで正常に動作として、それは現在の作業ディレクトリからの相対であるときに必要なファイルが存在するかどうかをチェックして動作します。しかし、インクルードファイルは、パス上の他の場所にいたならば、あなたはいくつかのパスをチェックする必要があります。
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');
}
と思い、正しい方は:
if(file_exists(stream_resolve_include_path($filepath))){
include $filepath;
}
これは、 の書類 という stream_resolve_include_path
を解決する"ファイルのパスを、同じルールとしてのfopen()するようになります."
一部の人が利用 is_file
または is_readable
が なかなか一般利用の場合 が、一般利用の場合、ファイル塞がご利用いただけませんその後file_exists TRUEを返すと、私が何か必要な通知ととも醜いエラーメッセージの最終ユーザーの顔やその他す予期せぬ挙動を説明後が低下する可能性があることをデータとか。