Originariamente inviato da oly1982
include, require, die, exit, define, echo, etc. etc. sono dei costrutti (non delle funzioni ... come indicato sulla guida di html.it!!)![]()
define() pero' non e' un costrutto.
infatti non si può scrivere:
$result = include("file.php");![]()
si puo'.
I costrutti possono restituire un valore. Ad esempio print() restituisce sempre 1, mentre include() restituisce: false se non puo' includere il file, 1 se lo include ma non c'e' nessun return nel file, blabla dove blabla e' il return del file incluso. Con i file remoti il discorso puo' cambiare.in pratica i costrutti non danno un output ma eseguono un'azione (un comando elementare)... per tanto il costrutto include non darà alcun risultato... nemmeno un risultato boleanno (TRUE/FALSE)!
Specificatamente include se trove il file lo include... altrimenti darà un warning (NON FALSE!!).
include ... or die() non funziona, ma non per il motivo che hai detto tu, ma per una questione di sintassi.L'utilizzo del costrutto die/exit scritto nella sintassi funzione() or die (); determina che qualora la funzione() darà come risultate FALSE si ha l'interruzione del flusso dello script...
ma include non è una funzione ovvero non dà un risultato boleano
Scrivi
(@include 'non esiste.php') or die('ciccia');
e vedrai che funziona
Per il semplice motivo che, essendo include un costrutto speciale, che non ha bisogno di parentesi ma valuta il contenuto tra le virgolette
l'espressione
@include 'non esiste.php' or die('ciccia');
viene interprettata dal parser come:
@include ('non esiste.php' or die('ciccia'));
con altre parole
@include(1);
e di conseguenza va a puttane.
ps: dottwatson mi ha anticipato, ma dal momento che stavo comunque scrivendo questo post, lo pubblico lo stesso![]()