Чи є різниця між ними? Чи є їх використання справою переваги? Чи використовує одне над іншим якісь переваги? Що краще для безпеки?
Чи є різниця між ними? Чи є їх використання справою переваги? Чи використовує одне над іншим якісь переваги? Що краще для безпеки?
Відповіді:
Ви знайдете відмінності, пояснені в детальному посібнику PHP на сторінціrequire :
requireє ідентичним, заincludeвинятком випадків відмови, він також призведе до фатальноїE_COMPILE_ERRORпомилки рівня. Іншими словами, він зупинить сценарій, тоді як включає лише видає попередження (E_WARNING), яке дозволяє продовжувати сценарій.
Див @ відповідь efritz в для прикладу
<?php if (isset($flibbertygibbet)) require 'file.php';здавалося б, ця відповідь виглядає абсолютно невірною. В іншому випадку я повинен отримати фатальну помилку, хоча умова не відповідає дійсності. straceне показує PHP, навіть намагаючись торкнутися file.php.
if (false) require 'file.php';призведе до завантаження файлу "file.php" (але не виконаного). TLDR не враховує всіх цих коментарів.
requireпризведе до фатальної помилки PHP, якщо файл не вдасться завантажити. (Виконання зупиняється)
includeвидає Попередження, якщо файл не можна завантажити. (Виконання триває)
Ось приємна ілюстрація включення та вимагання різниці :
Від: Різниця вимагає від включення php (автор Robert; листопад 2012)
Використовуйте, 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!";
}
Примітка: наприклад, для роботи 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";
?>
Дуже простий практичний приклад з кодом. Буде показано перше відлуння. Незалежно від того, що ви використовуєте, включіть або вимагайте, оскільки його запуски перед включенням або необхідністю.
Щоб перевірити результат, у другому рядку коду навмисно надайте неправильний шлях до файлу або помиліться у назві файлу. Таким чином, друге відлуння, яке відображатиметься чи ні, буде повністю залежати від того, використовуєте ви потребуєте чи включаєте .
Якщо ви використовуєте вимагаєте, друге відлуння не виконується, але якщо ви використовуєте, включайте незалежно від того, яка помилка виходить, ви побачите і результат другого відлуння.
У разі включення програми не припиняється та відображається попередження у веб-переглядачі, з іншого боку Потрібна програма припиниться та відобразить фатальну помилку у випадку, якщо файл не знайдений.