Sempre use "exigir". "incluir" é tão conveniente quanto uma porta elétrica em uma sauna.
Marco Mariani
2
@MarcoMariani Como isso seria inconveniente? Provavelmente está claro, só não estou vendo. Talvez o vapor?
Austin Burk
Simplificando, se um arquivo 'foo.php' estiver faltando por engano, eu quero saber o mais rápido possível, não quando uma função que deveria estar no foo.php for chamada. Substituir include com require geralmente pode revelar erros. Digamos que o config.php esteja ausente e o aplicativo esteja sendo executado com uma configuração padrão. Qual é melhor para segurança? Quanto à sauna, quando estou dentro e a porta não abre por algum motivo, eu não gosto.
Marco Mariani
Respostas:
148
Você encontra as diferenças explicadas no manual detalhado do PHP na página derequire :
requireé idêntico, includeexceto se houver falha, também produzirá um E_COMPILE_ERRORerro 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.
tiposaurus.co.uk/2011/04/04/… "A principal diferença entre require () e include () é que se você precisar () de um arquivo que não possa ser carregado (por exemplo, se não estiver lá), então ele gera um erro fatal que interromperá completamente a execução da página e não será gerada mais saída.Por outro lado, se você incluir () um arquivo que não pode ser carregado, isso simplesmente gerará um aviso e continue construindo a página ".
stormwild
3
"O que você deve usar depende da situação; require () é mais adequado para carregar arquivos essenciais para o restante da página - por exemplo, se você tiver um site orientado a banco de dados, use o require () para incluir um arquivo contendo o o login e a senha do banco de dados são claramente preferidos ao uso de include (). Se você usou o include () nessa situação, poderá gerar mais avisos e erros do que pretendia. "
stormwild
3
<?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. stracenão mostra o PHP nem tentando tocar file.php.
cHao
Ao contrário de include (), require () sempre lerá no arquivo de destino, mesmo se a linha em que ele estiver nunca for executada. Se você deseja incluir um arquivo condicionalmente, use include (). E No entanto, se a linha na qual ocorre o require () não for executada, nenhum código no arquivo de destino será executado. Parece estar dizendo a coisa oposta, ou estou entendendo mal?
Lorless
1
Todos esses comentários se referem à versão original desta resposta antes de ser editada. Originalmente, havia uma reivindicação inválida, alegando que if (false) require 'file.php';faria com que 'file.php' fosse carregado (mas não executado). O TLDR desconsidera todos esses comentários.
Kevin Wheeler
181
requirelançará um erro fatal do PHP se o arquivo não puder ser carregado. (A execução para)
includeproduz um aviso se o arquivo não puder ser carregado. (Execução continua)
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 requiresignifica 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 settingrequire'not_there';// Example 2.// users see a meaningful error messagetry{
include 'not_there';}catch(Exception $e){
echo "something strange happened!";}
No nível de inclusão, não é um ótimo lugar para aprender que o arquivo que você espera não está lá. Nenhum dos problemas do seu exemplo é um dos fatores que impedem os visualizadores do site.
Kzqai
0
<?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.
Respostas:
Você encontra as diferenças explicadas no manual detalhado do PHP na página de
require
:Veja a resposta de @ efritz para um exemplo
fonte
<?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 tocarfile.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 :
fonte
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.fonte
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
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
fonte
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.
fonte
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.
fonte