web-dev-qa-db-ja.com

PHPの「含める」と「必須」の違い

それらの間に違いはありますか?それらの使用は好みの問題ですか?どちらを使用しても利点はありますか?どちらがセキュリティに優れていますか?

172
Dan Hanly

require のページの詳細なPHPマニュアルで説明されている違いを見つけます:

requireinclude と同じですが、失敗した場合は致命的なE_COMPILE_ERRORレベルエラーも生成します。言い換えると、includeは警告(E_WARNING)のみを出力し、スクリプトの続行を許可しますが、スクリプトを停止します。

例については、 @ efritzの回答 を参照してください

147
Steven

ファイルをロードできない場合、requireはPHP致命的エラーをスローします。 (実行停止)

includeは、ファイルをロードできない場合に警告を生成します。 (実行は継続)

ここにニースがあります includeとrequireの違いのイラスト

enter image description here

差出人:PHPの違いが必要であるか含めるか(ロバート; 2012年11月)

180
efritz

ファイルが存在しない場合など、ファイルをロードせずにスクリプトを続行することを気にせず、警告エラーメッセージが表示されたまま生きることができる場合は、includeを使用します。

requireを使用すると、指定したファイルをロードできない場合にスクリプトが停止し、致命的なエラーがスローされます。

5
Martin Bean

他の人が指摘したように、唯一の違いは、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!";
  }

NB:ここで説明するように、たとえば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");   
2
user187291
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";
?>

コードを使用した非常に簡単な実用例最初のエコーが表示されます。 includeまたはrequireを使用しても、includeまたはrequireの前に実行されるためです。

結果を確認するには、コードの2行目で意図的にファイルへの間違ったパスを指定するか、ファイル名にエラーを入れます。したがって、表示される2番目のエコーは、requireincludeのどちらを使用するかに完全に依存します。

requireを使用すると、2番目のエコーは実行されませんが、includeを使用すると、どんなエラーが発生しても2番目のエコーの結果が表示されます。

0