それらの間に違いはありますか?それらの使用は好みの問題ですか?どちらを使用してもメリットはありますか?どちらがセキュリティに優れていますか?
それらの間に違いはありますか?それらの使用は好みの問題ですか?どちらを使用してもメリットはありますか?どちらがセキュリティに優れていますか?
回答:
あなたはのページのrequire
詳細なPHPマニュアルで説明されている違いを見つけます:
require
include
失敗時以外はと同じですが、致命的なE_COMPILE_ERROR
レベルのエラーも生成します。つまり、スクリプトが停止するのに対し、includeE_WARNING
はスクリプトの続行を許可する警告()のみを発行します。
例については@efritzの回答を参照してください
<?php if (isset($flibbertygibbet)) require 'file.php';
この答えは完全に正しくないように見えるでしょう。そうしないと、条件が真ではない場合でも、致命的なエラーが発生します。 strace
に触れようとしてもPHPは表示されませんfile.php
。
if (false) require 'file.php';
があり、「file.php」がロードされる(ただし実行されない)と主張していました。TLDRはこれらのコメントをすべて無視します。
require
ファイルをロードできない場合、PHPの致命的なエラーがスローされます。(実行停止)
include
ファイルを読み込めない場合は警告が表示されます。(実行は継続)
includeとrequireの違いの良い例を以下に示します。
他の人が指摘したように、唯一の違いは、requireが致命的なエラーをスローし、含めることができることです-キャッチ可能な警告。どちらを使用するかについては、含めることを固執することをお勧めします。どうして?警告をキャッチして、エンドユーザーに意味のあるフィードバックを提供できるからです。検討する
// 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番目のエコーの結果も表示されます。
インクルードプログラムが終了せず、ブラウザに警告が表示される場合、ファイルが見つからない場合、必要プログラムは終了し、致命的なエラーが表示されます。