¿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?
Siempre use "requerir". "incluir" es tan conveniente como una puerta eléctrica en una sauna.
Marco Mariani
2
@MarcoMariani ¿Cómo sería eso inconveniente? Probablemente esté claro, simplemente no lo estoy viendo. Tal vez el vapor?
Austin Burk
En pocas palabras, si falta un archivo 'foo.php' por error, quiero saber lo antes posible, no cuándo se llama a una función que debería haber estado en foo.php. Reemplazar include con require a menudo puede revelar errores. Supongamos que falta config.php y la aplicación se ejecuta con una configuración predeterminada. ¿Cuál es mejor para la seguridad? En cuanto a la sauna, cuando estoy dentro y la puerta no se abre por alguna razón, no me gusta.
Marco Mariani
Respuestas:
148
Las diferencias se explican en el manual detallado de PHP en la página derequire :
requirees idéntico a, includeexcepto en caso de falla, también producirá un E_COMPILE_ERRORerror 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.
tiposaurus.co.uk/2011/04/04/… "La diferencia clave entre require () e include () es que si necesita () un archivo que no se puede cargar (por ejemplo, si no está allí), entonces genera un error fatal que detendrá la ejecución de la página por completo y no se generará más salida. Por otro lado, si incluye () un archivo que no se puede cargar, esto simplemente generará una advertencia y continuar construyendo la página ".
stormwild
3
"Lo que debe usar depende de la situación; require () es el más adecuado para cargar archivos que son esenciales para el resto de la página; por ejemplo, si tiene un sitio web basado en una base de datos, entonces use require () para incluir un archivo que contenga el inicio de sesión y la contraseña de la base de datos son claramente preferibles al uso de include (). Si usó include () en esta situación, puede terminar generando más advertencias y errores de los que pretendía ".
stormwild
3
<?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. straceno muestra PHP incluso tratando de tocar file.php.
cHao
A diferencia de include (), require () siempre se leerá en el archivo de destino, incluso si la línea en la que se encuentra nunca se ejecuta. Si desea incluir un archivo condicionalmente, use include (). Y, sin embargo, si no se ejecuta la línea en la que se requiere require (), tampoco se ejecutará ninguno de los códigos del archivo de destino. Parece estar diciendo lo contrario, ¿o estoy malentendido?
lorless
1
Todos estos comentarios se refieren a la versión original de esta respuesta antes de que se editara. Originalmente hubo un reclamo no válido, alegando que if (false) require 'file.php';causaría que se cargara 'file.php' (pero no se ejecutara). TLDR ignora todos estos comentarios.
Kevin Wheeler
181
requirearrojará un error fatal de PHP si el archivo no se puede cargar. (La ejecución se detiene)
includeproduce una advertencia si el archivo no se puede cargar. (La ejecución continúa)
Úselo includesi 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 requiresignifica 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 settingrequire'not_there';// Example 2.// users see a meaningful error messagetry{
include 'not_there';}catch(Exception $e){
echo "something strange happened!";}
En el nivel de inclusión, no es un gran lugar para aprender que el archivo que espera no está allí. Ninguno de los problemas en su ejemplo es uno para empujar a los visitantes de su sitio web.
Kzqai
0
<?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.
Respuestas:
Las diferencias se explican en el manual detallado de PHP en la página de
require
:Ver la respuesta de @ efritz para un ejemplo
fuente
<?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 tocarfile.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 :
fuente
Ú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.fuente
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
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
fuente
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.
fuente
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.
fuente