Чи є різниця між ними? Чи є їх використання справою переваги? Чи використовує одне над іншим якісь переваги? Що краще для безпеки?
Чи є різниця між ними? Чи є їх використання справою переваги? Чи використовує одне над іншим якісь переваги? Що краще для безпеки?
Відповіді:
Ви знайдете відмінності, пояснені в детальному посібнику 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";
?>
Дуже простий практичний приклад з кодом. Буде показано перше відлуння. Незалежно від того, що ви використовуєте, включіть або вимагайте, оскільки його запуски перед включенням або необхідністю.
Щоб перевірити результат, у другому рядку коду навмисно надайте неправильний шлях до файлу або помиліться у назві файлу. Таким чином, друге відлуння, яке відображатиметься чи ні, буде повністю залежати від того, використовуєте ви потребуєте чи включаєте .
Якщо ви використовуєте вимагаєте, друге відлуння не виконується, але якщо ви використовуєте, включайте незалежно від того, яка помилка виходить, ви побачите і результат другого відлуння.
У разі включення програми не припиняється та відображається попередження у веб-переглядачі, з іншого боку Потрібна програма припиниться та відобразить фатальну помилку у випадку, якщо файл не знайдений.