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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top