C'è qualche differenza tra loro? Usarli è una questione di preferenza? L'uso l'uno rispetto all'altro produce dei vantaggi? Quale è meglio per la sicurezza?
C'è qualche differenza tra loro? Usarli è una questione di preferenza? L'uso l'uno rispetto all'altro produce dei vantaggi? Quale è meglio per la sicurezza?
Risposte:
Le differenze sono spiegate nel manuale dettagliato di PHP nella pagina direquire
:
require
è identico ainclude
meno che in caso di fallimento produrrà anche unE_COMPILE_ERROR
errore di livello fatale . In altre parole, interromperà lo script mentre include include solo un avviso (E_WARNING
) che consente allo script di continuare.
Vedi la risposta di @efritz per un esempio
<?php if (isset($flibbertygibbet)) require 'file.php';
sembrerebbe rendere questa risposta totalmente errata. Altrimenti, dovrei ricevere un errore fatale anche se la condizione non è vera. strace
non mostra PHP nemmeno provando a toccare file.php
.
if (false) require 'file.php';
avrebbe caricato (ma non eseguito) 'file.php'. TLDR ignora tutti questi commenti.
require
genererà un errore irreversibile PHP se il file non può essere caricato. (L'esecuzione si interrompe)
include
produce un avviso se il file non può essere caricato. (L'esecuzione continua)
Ecco una bella illustrazione di include e richiedono differenze :
Da: differenza richiesta vs. include php (di Robert; Nov 2012)
Usa include
se non ti dispiace che lo script continui senza caricare il file (nel caso in cui non esista ecc.) E puoi (anche se non dovresti) vivere con un messaggio di errore di avviso visualizzato.
Utilizzando require
significa che lo script si arresterà se non è in grado di caricare il file specificato e genererà un errore irreversibile.
Come altri hanno sottolineato, l'unica differenza è che richiede un errore fatale e include - un avviso catchable. Per quanto riguarda quale utilizzare, il mio consiglio è di attenersi a includere. Perché? perché puoi ricevere un avviso e generare un feedback significativo per gli utenti finali. Tener conto di
// 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: per esempio 2 per funzionare è necessario installare un gestore errori-eccezioni, come descritto qui 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 esempio pratico molto semplice con il codice. Verrà visualizzata la prima eco. Non importa che usi includa o richieda perché le sue esecuzioni prima includono o obbligano.
Per verificare il risultato, nella seconda riga di un codice fornire intenzionalmente il percorso errato al file o commettere errori nel nome del file. Pertanto, la seconda eco da visualizzare o meno dipenderà totalmente dal fatto che si usi o richieda l' inclusione .
Se usi richiedi la seconda eco non verrà eseguita, ma se usi includi non importa quale errore arriva vedrai anche il risultato della seconda eco.
Nel caso in cui il programma Includi non si interrompa e visualizzi un avviso sul browser, D'altra parte il programma Richiedi verrà chiuso e verrà visualizzato un errore irreversibile in caso di file non trovato.