Разница между «включить» и «требовать» в PHP - PullRequest
171 голосов
/ 03 сентября 2010

Есть ли разница между ними?Является ли их использование вопросом предпочтения?Дает ли использование одного над другим преимущества?Что лучше для безопасности?

Ответы [ 6 ]

181 голосов
/ 03 сентября 2010

require выдаст PHP Fatal Error, если файл не может быть загружен. (Выполнение прекращается)

include выдает предупреждение, если файл не может быть загружен. (Выполнение продолжается)

Вот хорошая иллюстрация включения и разницы :

enter image description here

От: Требуется разница по сравнению с PHP (Роберт; ноябрь 2012)

146 голосов
/ 03 сентября 2010

Вы найдете различия, объясненные в подробном руководстве по PHP на странице require:

require идентичен include, за исключением того, что при отказе это также приведет к фатальной E_COMPILE_ERROR ошибке уровня , Другими словами, он остановит скрипт, тогда как include только выдаст предупреждение (E_WARNING), которое позволит скрипту продолжить.

См. @ efritz's answer для примера

5 голосов
/ 03 сентября 2010

Используйте include, если вы не возражаете, чтобы ваш сценарий продолжался без загрузки файла (в случае, если он не существует и т. Д.), И вы можете (хотя и не должны) жить с отображаемым предупреждением об ошибке. 1002 *

Использование require означает, что ваш скрипт остановится, если не сможет загрузить указанный файл, и выдаст фатальную ошибку.

2 голосов
/ 03 сентября 2010

Как уже указывали другие, единственное отличие состоит в том, что требуется выдать фатальную ошибку, а в качестве включения - подхватить предупреждение.Что касается того, чтобы использовать, мой совет должен придерживаться, чтобы включить.Зачем?потому что вы можете поймать предупреждение и дать значимые отзывы конечным пользователям.Рассмотрим

  // 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");   
0 голосов
/ 10 января 2017
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";
?>

Очень простой практический пример с кодом. Будет отображено первое эхо.Независимо от того, используете ли вы include или require, потому что он запускается перед включением или обязательным.

Чтобы проверить результат, во второй строке кода намеренно укажите неправильный путь к файлу или сделайте ошибку в имени файла.Таким образом, отображаемый второй эхо-сигнал или нет будет полностью зависеть от того, используете ли вы требуют или , включают .

Если вы используете , требуется Второе эхо не будет выполнено, но если вы используете include , независимо от того, какая ошибка возникнет, вы также увидите результат второго эха.

0 голосов
/ 13 февраля 2013

Если программа «Включить» не прекратит работу и не отобразит предупреждение в браузере, с другой стороны, программа «Требовать» прекратит работу и отобразит фатальную ошибку в случае отсутствия файла.

...