Есть ли разница между ними? Является ли их использование вопросом предпочтения? Дает ли использование одного над другим преимущества? Что лучше для безопасности?
Всегда используйте «требовать». «включить» так же удобно, как электрическую дверь в сауне.
Марко Мариани
2
@MarcoMariani Как это будет неудобно? Это, наверное, понятно, я просто этого не вижу. Возможно пар?
Остин Берк,
Проще говоря, если файл 'foo.php' отсутствует по ошибке, я хочу знать как можно скорее, а не когда вызывается функция, которая должна была быть в foo.php. Замена include на require может часто выявлять ошибки. Допустим, отсутствует файл config.php, и приложение работает с конфигурацией по умолчанию. Что лучше для безопасности? Что касается сауны, когда я внутри и дверь почему-то не открывается, мне это не нравится.
Марко Мариани
Ответы:
148
Вы найдете различия, объясненные в подробном руководстве по PHP на страницеrequire :
requireидентичен, за includeисключением того, что при отказе он также приведет к фатальной E_COMPILE_ERRORошибке уровня. Другими словами, он остановит скрипт, тогда как include генерирует только предупреждение ( E_WARNING), которое позволяет скрипту продолжить.
tiposaurus.co.uk/2011/04/04/… "Ключевое различие между require () и include () состоит в том, что если вам требуется () файл, который не может быть загружен (например, если его там нет), то он генерирует фатальную ошибку, которая полностью останавливает выполнение страницы, и вывод больше не будет генерироваться. С другой стороны, если вы включите () файл, который не может быть загружен, то это просто сгенерирует предупреждение и продолжить создание страницы. "
stormwild
3
«То, что вы должны использовать, зависит от ситуации; require () лучше всего подходит для загрузки файлов, которые важны для остальной части страницы - например, если у вас есть веб-сайт, управляемый базой данных, тогда используйте require (), чтобы включить файл, содержащий логин и пароль для базы данных явно предпочтительнее, чем для использования include (). Если в этой ситуации вы используете include (), то в итоге вы можете генерировать больше предупреждений и ошибок, чем планировали ».
stormwild
3
<?php if (isset($flibbertygibbet)) require 'file.php';Казалось бы, этот ответ выглядит совершенно неправильно. В противном случае я должен получить фатальную ошибку, даже если условие не соответствует действительности. stracePHP не показывает даже попытки прикоснуться file.php.
Чао
В отличие от include (), require () всегда читает в целевом файле, даже если строка, в которой он находится, никогда не выполняется. Если вы хотите условно включить файл, используйте include (). И тем не менее, если строка, в которой происходит require (), не выполняется, ни один из кодов в целевом файле не будет выполнен. Кажется, я говорю противоположное, или я неправильно понимаю?
2013 г. без работы
1
Все эти комментарии относятся к исходной версии этого ответа до его редактирования. Первоначально было недопустимое утверждение, утверждающее, if (false) require 'file.php';что файл 'file.php' будет загружен (но не выполнен). TLDR игнорирует все эти комментарии.
Кевин Уилер
181
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 settingrequire'not_there';// Example 2.// users see a meaningful error messagetry{
include 'not_there';}catch(Exception $e){
echo "something strange happened!";}
На уровне включения не очень хорошее место, чтобы узнать, что ожидаемого файла там нет. Ни одна из проблем в вашем примере не отталкивает зрителей вашего сайта.
Kzqai
0
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";?>
Очень простой практический пример с кодом.
Первый эхо будет отображаться. Независимо от того, что вы используете, включить или требовать, потому что его запускает прежде, чем включить или требуется.
Чтобы проверить результат, во второй строке кода намеренно укажите неправильный путь к файлу или сделайте ошибку в имени файла. Таким образом, второе эхо, которое будет отображаться или нет, будет полностью зависеть от того, используете ли вы require или include .
Если вы используете require, второе эхо не будет выполнено, но если вы используете include, независимо от того, какая ошибка возникнет, вы также увидите результат второго echo.
Если программа «Включить» не прекратит работу и не отобразит предупреждение в браузере, с другой стороны, программа «Требовать» завершит работу и отобразит фатальную ошибку в случае, если файл не найден.
Ответы:
Вы найдете различия, объясненные в подробном руководстве по PHP на странице
require
:Смотрите ответ @ 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
означает, что ваш скрипт остановится, если не сможет загрузить указанный файл, и выдаст фатальную ошибку.источник
Как отмечали другие, единственное отличие состоит в том, что требуется выбрасывать фатальную ошибку, а включать - ловимое предупреждение. Что касается того, чтобы использовать, мой совет должен придерживаться, чтобы включить. Зачем? потому что вы можете поймать предупреждение и дать значимые отзывы конечным пользователям. Рассматривать
NB. Например, для работы 2 необходимо установить обработчик ошибок в исключения, как описано здесь http://www.php.net/manual/en/class.errorexception.php
источник
Очень простой практический пример с кодом. Первый эхо будет отображаться. Независимо от того, что вы используете, включить или требовать, потому что его запускает прежде, чем включить или требуется.
Чтобы проверить результат, во второй строке кода намеренно укажите неправильный путь к файлу или сделайте ошибку в имени файла. Таким образом, второе эхо, которое будет отображаться или нет, будет полностью зависеть от того, используете ли вы require или include .
Если вы используете require, второе эхо не будет выполнено, но если вы используете include, независимо от того, какая ошибка возникнет, вы также увидите результат второго echo.
источник
Если программа «Включить» не прекратит работу и не отобразит предупреждение в браузере, с другой стороны, программа «Требовать» завершит работу и отобразит фатальную ошибку в случае, если файл не найден.
источник