Existe alguma diferença entre eles? Usá-los é uma questão de preferência? Usar um sobre o outro produz vantagens? Qual é melhor para segurança?
Existe alguma diferença entre eles? Usá-los é uma questão de preferência? Usar um sobre o outro produz vantagens? Qual é melhor para segurança?
Respostas:
Você encontra as diferenças explicadas no manual detalhado do PHP na página derequire
:
require
é idêntico,include
exceto se houver falha, também produzirá umE_COMPILE_ERROR
erro de nível fatal . Em outras palavras, ele interromperá o script, enquanto include apenas emite um aviso (E_WARNING
) que permite que o script continue.
Veja a resposta de @ efritz para um exemplo
<?php if (isset($flibbertygibbet)) require 'file.php';
parece fazer com que esta resposta pareça totalmente incorreta. Caso contrário, eu deveria receber um erro fatal, mesmo que a condição não seja verdadeira. strace
não mostra o PHP nem tentando tocar file.php
.
if (false) require 'file.php';
faria com que 'file.php' fosse carregado (mas não executado). O TLDR desconsidera todos esses comentários.
require
lançará um erro fatal do PHP se o arquivo não puder ser carregado. (A execução para)
include
produz um aviso se o arquivo não puder ser carregado. (Execução continua)
Aqui está uma boa ilustração de incluir e exigir diferença :
De: Diferença requer vs. inclui php (por Robert; novembro de 2012)
Usar include
se você não se importa de continuar seu script sem carregar o arquivo (caso ele não exista, etc.) e você pode (embora não deva) viver com uma mensagem de erro de aviso sendo exibida.
Usar require
significa que seu script será interrompido se não puder carregar o arquivo especificado e lançará um erro fatal.
Como outros apontaram, a única diferença é que isso requer um erro fatal e inclui - um aviso capturável. Quanto a qual usar, meu conselho é manter a inclusão. Por quê? porque você pode receber um aviso e produzir um feedback significativo para os usuários finais. 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!";
}
Nota: por exemplo 2 para funcionar, você precisa instalar um manipulador de erros para exceções, conforme descrito aqui 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";
?>
Um exemplo prático muito simples com código. O primeiro eco será exibido. Não importa o que você use incluir ou exigir, porque suas execuções anteriores incluem ou são necessárias.
Para verificar o resultado, na segunda linha de um código, forneça intencionalmente o caminho errado para o arquivo ou cometa um erro no nome do arquivo. Portanto, o segundo eco a ser exibido ou não será totalmente dependente de você usar exigir ou incluir .
Se você usar exigir que o segundo eco não seja executado, mas se você usar incluir, não importa o erro, você verá o resultado do segundo eco também.
No caso de o Programa Incluir não terminar e exibir um aviso no navegador, por outro lado, o Exigir que o programa termine e exibirá um erro fatal no caso de um arquivo não encontrado.