it-swarm.com.ru

Разница между "включить" и "требовать" в PHP

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

169
Dan Hanly

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

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

См. @ ответ Эфрица пример

143
Steven

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

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

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

enter image description here

От:Разница между требованием и включением php (Роберт; ноябрь 2012)

178
efritz

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

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

4
Martin Bean

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

  // 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");   
1
user187291
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";
?>

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

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

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

0
Tara Prasad Gurung