¿Hay alguna diferencia entre ellos? ¿Usarlos es una cuestión de preferencia? ¿Usar uno sobre el otro produce alguna ventaja? ¿Cuál es mejor para la seguridad?
¿Hay alguna diferencia entre ellos? ¿Usarlos es una cuestión de preferencia? ¿Usar uno sobre el otro produce alguna ventaja? ¿Cuál es mejor para la seguridad?
Respuestas:
Las diferencias se explican en el manual detallado de PHP en la página derequire
:
require
es idéntico a,include
excepto en caso de falla, también producirá unE_COMPILE_ERROR
error de nivel fatal . En otras palabras, detendrá el script mientras que include solo emite una advertencia (E_WARNING
) que permite que el script continúe.
Ver la respuesta de @ efritz para un ejemplo
<?php if (isset($flibbertygibbet)) require 'file.php';
Parece que esta respuesta parece totalmente incorrecta. De lo contrario, debería recibir un error fatal aunque la condición no sea verdadera. strace
no muestra PHP incluso tratando de tocar file.php
.
if (false) require 'file.php';
causaría que se cargara 'file.php' (pero no se ejecutara). TLDR ignora todos estos comentarios.
require
arrojará un error fatal de PHP si el archivo no se puede cargar. (La ejecución se detiene)
include
produce una advertencia si el archivo no se puede cargar. (La ejecución continúa)
Aquí hay una buena ilustración de incluir y requerir diferencia :
De: La diferencia requiere vs. incluye php (por Robert; Nov 2012)
Úselo include
si no le importa que su script continúe sin cargar el archivo (en caso de que no exista, etc.) y pueda (aunque no debería) vivir con un mensaje de error de Advertencia que se muestra.
Usar require
significa que su script se detendrá si no puede cargar el archivo especificado y arrojará un error Fatal.
Como otros señalaron, la única diferencia es que requieren arrojar un error fatal e incluyen una advertencia atrapable. En cuanto a cuál usar, mi consejo es seguir incluyéndolo. ¿Por qué? porque puede captar una advertencia y generar comentarios significativos para los usuarios finales. Considerar
// 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: por ejemplo 2 para trabajar, necesita instalar un controlador de errores a excepciones, como se describe aquí 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";
?>
Un ejemplo práctico muy simple con código. Se mostrará el primer eco. No importa si utiliza include o require porque se ejecuta antes de include o required.
Para verificar el resultado, en la segunda línea de un código, proporcione intencionalmente la ruta incorrecta al archivo o cometa un error en el nombre del archivo. Por lo tanto, el segundo eco que se mostrará o no dependerá totalmente de si usa require o include .
Si usa require, el segundo eco no se ejecutará, pero si usa include, no importa qué error aparezca, también verá el resultado del segundo eco.
En caso de que el programa Incluir no termine y muestre una advertencia en el navegador, por otro lado, el programa Requerir terminará y mostrará un error grave en caso de que no se encuentre el archivo.