Smettere di uno script PHP all'interno di un'altra pagina PHP
Domanda
Sto cercando di implementare la cache per uno script PHP che sto scrivendo, ma io continuo a correre nel seguente problema. Voglio lo script da inserire in altre pagine PHP, ma quando provo a passare il file memorizzato nella cache e di uscita dello script incorporato esce sia la sceneggiatura e la pagina principale, ma non analizza il resto del codice sulla pagina padre . Vedere il codice qui sotto per un esempio.
index.php
<?php
echo "Hello World!<br />";
include("file2.php");
echo "This line will not be printed";
?>
file2.php
<?php
$whatever = true;
if ($whatever == true) {
echo "file2.php has been included<br />";
exit; // This stops both scripts from further execution
}
// Additional code here
?>
Se viene eseguito il sopra index.php si ottiene il seguente output:
Hello World!
file2.php has been included
Comunque, sto cercando di farlo assomigliare a questo:
Hello World!
file2.php has been included
This line will not be printed
Soluzione
Basta avvolgere il "codice aggiuntivo qui" in un'istruzione else?
<?php
$whatever = true;
if ($whatever == true) {
echo "file2.php has been included<br />";
} else {
// Additional code here
}
?>
In caso contrario, io non sono sicuro di quello che stai ricevendo in. Il exit comando termina sempre l'esecuzione corrente per intero - non solo l'esecuzione del file corrente (per il quale, non esiste un comando)
Modifica
Grazie a commenti e messaggi di phlak, tomhaigh, MichaelM, e Mario, io stesso imparato qualcosa oggi - che si possono in effetti interrompere l'esecuzione di un singolo file incluso w / ritorno di comando. Grazie, ragazzi!
Altri suggerimenti
Utilizzare return;
invece di exit;
nel file incluso - questo sarà solo fermare l'esecuzione di quello script.
Si noti che è un anche usare questo per restituire un valore allo script genitore per es.
file1.php
<?php
echo 'parent script';
$val = include('file2.php'); //$val will equal 'value'
echo 'This will be printed';
file2.php
<?php
echo 'child script';
return 'value';
Io personalmente cerco di evitare if-else condizioni ove possibile e usare (non so se ci sia un termine coniato per esso, ma) precoce uscita condizioni intercettazione.
index.php
<?php
echo 'header';
include 'content.php';
echo 'footer';
?>
content.php
<?php
if ($cached)
{
echo cached_version();
return; // return is not just for functions, in php...
}
//proceed with echoing whatever you want to echo if there's no cached version.
...
...
?>
Perché non incapsulare i contenuti di file2.php in una funzione. In questo modo è possibile restituire dalla funzione quando è necessario, e il resto della esecuzione non si fermerà. ad esempio:
file2.php
<?php
// this function contains the same code that was originally in file2.php
function exe()
{
$whatever = true;
if ($whatever)
{
echo "file2.php has been included <br />";
// instead of exit, we just return from the function
return;
}
}
// we call the function automatically when the file is included
exe();
?>
Lasciare index.php esattamente come è e si dovrebbe vedere l'uscita che si sta tentando di raggiungere.