Есть ли разница между ними? Является ли их использование вопросом предпочтения? Дает ли использование одного над другим преимущества? Что лучше для безопасности?
Есть ли разница между ними? Является ли их использование вопросом предпочтения? Дает ли использование одного над другим преимущества? Что лучше для безопасности?
Ответы:
Вы найдете различия, объясненные в подробном руководстве по PHP на страницеrequire
:
require
идентичен, заinclude
исключением того, что при отказе он также приведет к фатальнойE_COMPILE_ERROR
ошибке уровня. Другими словами, он остановит скрипт, тогда как include генерирует только предупреждение (E_WARNING
), которое позволяет скрипту продолжить.
Смотрите ответ @ efritz для примера
<?php if (isset($flibbertygibbet)) require 'file.php';
Казалось бы, этот ответ выглядит совершенно неправильно. В противном случае я должен получить фатальную ошибку, даже если условие не соответствует действительности. strace
PHP не показывает даже попытки прикоснуться file.php
.
if (false) require 'file.php';
что файл 'file.php' будет загружен (но не выполнен). TLDR игнорирует все эти комментарии.
require
выдаст PHP Fatal Error, если файл не может быть загружен. (Исполнение останавливается)
include
выдает предупреждение, если файл не может быть загружен. (Выполнение продолжается)
Вот хорошая иллюстрация включения и требуют разницы :
Используйте, include
если вы не против, чтобы ваш сценарий продолжался без загрузки файла (если он не существует и т. Д.), И вы можете (хотя и не должны) жить с отображаемым предупреждением об ошибке.
Использование 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");
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";
?>
Очень простой практический пример с кодом. Первый эхо будет отображаться. Независимо от того, что вы используете, включить или требовать, потому что его запускает прежде, чем включить или требуется.
Чтобы проверить результат, во второй строке кода намеренно укажите неправильный путь к файлу или сделайте ошибку в имени файла. Таким образом, второе эхо, которое будет отображаться или нет, будет полностью зависеть от того, используете ли вы require или include .
Если вы используете require, второе эхо не будет выполнено, но если вы используете include, независимо от того, какая ошибка возникнет, вы также увидите результат второго echo.
Если программа «Включить» не прекратит работу и не отобразит предупреждение в браузере, с другой стороны, программа «Требовать» завершит работу и отобразит фатальную ошибку в случае, если файл не найден.