Codice buono o cattivo? O "una ragione segreta"?

0

Penso che questo codice:

if(file_exists("amodule.inc.php")) 
    require_once("amodule.inc.php");  

è fuorviante a causa dell'uso di require_once.

Penso che - per mantenere la logica e la "formulazione" in linea - "include_once" sarebbe appropriato (dove ci sono un certo numero di argomenti per non usare il "se" del tutto ma vorrei concentrarmi su "richiedere vs include ").

Per quanto riguarda la mia comprensione, l'unica differenza tra "require" e "include" è che "require ha una conseguenza (halt) se il file non esiste vs. include procede con solo un avvertimento.

Ma, nell'esempio, se il file non esiste, il codice require_once non verrà comunque eseguito. Quindi "richiede" fuorvia dal mio punto di vista.

Da una vista superficiale, si potrebbe argomentare che il codice sopra usando require_once e

if(file_exists("amodule.inc.php")) 
    include_once("amodule.inc.php");

sono "identici" quelli che, dal mio punto di vista, non lo sono. Perché:

Un'analisi "approssimativa" (come un controllo automatico di un progetto) lancia un messaggio, che "amodule.inc.php" è un file di progetto vitale, che il codice mostra, non lo è.

Inoltre, in un caso (non molto probabile) che tra l'esecuzione dell'istruzione "if" e l'istruzione require_once, il file possa essere cancellato. Poi, ancora peggio, il codice NON verrebbe eseguito come previsto (da eseguire senza carico), ma arrendersi.

Quindi, come vorresti che ragazzi là fuori discutessero?

    
posta gnat 06.10.2013 - 12:58
fonte

2 risposte

3

Hai ragione riguardo alla prima differenza. Includi e richiedi sono gli stessi, ad eccezione di richiedere interromperà l'esecuzione del programma, se il file è mancante, mentre include continuerà a essere eseguito e mostrerà un errore.

Dal manuale PHP:

require is identical to include except upon failure it will also produce a fatal E_COMPILE_ERROR level error. In other words, it will halt the script whereas include only emits a warning (E_WARNING) which allows the script to continue.

Quindi, se hai un gran numero di argomenti, allora sì, l'opzione include_once sarebbe preferibile, ma senza vedere il codice, dipenderà da ciò che vuoi che succeda se il file manca.

    
risposta data 06.10.2013 - 16:33
fonte
1

Il fatto che esista un file non significa che sia leggibile, è un primo problema:

link

Con include alcune altre strane cose accadono, vedi ad esempio:

link

Warning This function returns FALSE for files inaccessible due to safe mode restrictions. However these files still can be included if they are located in safe_mode_include_dir.

Quindi il controllo di file_exists è il metodo più conosciuto, ma forse non il più giusto, per vedere se è possibile includere un file.

Questa sembra essere la soluzione giusta:

link

Resolve filename against the include path according to the same rules as fopen()/ include.

Questo controlla davvero se è possibile includere il file.

Quindi: Se lo richiedi: Sì nella maggior parte dei casi. Se esiste un file di classe ed è includibile, il caricamento dovrebbe avere esito positivo. Se i file php non possono essere caricati correttamente, a mio avviso c'è un grosso problema con il server / software che chiameremmo fatale. Quindi, per noi è valido usare require_once.

    
risposta data 08.10.2013 - 10:34
fonte

Leggi altre domande sui tag