それらの間に違いはありますか?それらを使用するのは好みの問題ですか?どちらか一方を使用すると、何か利点がありますか? セキュリティ的にはどちらが良いですか?
7 に答える
require
ファイルをロードできない場合、PHP Fatal Error がスローされます。(実行停止)
include
ファイルを読み込めない場合は警告を生成します。(実行は継続)
以下はinclude と require の違いの素敵な図です:
違いについては、次のページのrequire
詳細なPHPマニュアルで説明されています。
require
include
失敗した場合を除いて同じですが、致命的なE_COMPILE_ERROR
レベルのエラーも発生します。つまり、スクリプトを停止しますが、includeはE_WARNING
、スクリプトの続行を許可する警告()のみを発行します。
例については、@efritzの回答を参照してください
include
ファイルをロードせずにスクリプトを続行してもかまわない場合 (ファイルが存在しない場合など) に使用し、(そうすべきではありませんが) 警告エラー メッセージが表示されても問題ありません。
を使用require
すると、指定されたファイルを読み込めない場合にスクリプトが停止し、致命的なエラーがスローされます。
他の人が指摘したように、唯一の違いは、require が致命的なエラーをスローし、include がキャッチ可能な警告であることです。どちらを使用するかに関して、私のアドバイスは、含めることに固執することです。なんで?警告をキャッチして、エンド ユーザーに有意義なフィードバックを提供できるからです。検討
// Example 1.
// users see a standard php error message or a blank screen
// depending on your display_errors setting
require 'not_there';
// Example 2.
// users see a meaningful error message
try {
include 'not_there';
} catch(Exception $e) {
echo "something strange happened!";
}
注意: たとえば 2 を機能させるには、ここで説明されているように、エラーから例外へのハンドラーをインストールする必要がありますhttp://www.php.net/manual/en/class.errorexception.php
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";
?>
コードを使用した非常に単純な実用的な例。 最初のエコーが表示されます。includeまたはrequireの前に実行されるため、includeまたはrequireを使用してもかまいません。
結果を確認するには、コードの 2 行目で意図的に間違ったパスを指定するか、ファイル名を間違えます。したがって、2 番目のエコーが表示されるかどうかは、 requireまたはincludeを使用するかどうかに完全に依存します。
requireを使用すると、2 番目のエコーは実行されませんが、includeを使用すると、どのようなエラーが発生しても、2 番目のエコーの結果も表示されます。
インクルードの場合、プログラムは終了せず、ブラウザに警告を表示しますが、要求プログラムは、ファイルが見つからない場合、終了し、致命的なエラーを表示します。