devo usare exit dopo header ("Location: http: // localhost / …") ;?

sto creando una sceneggiatura per validationre un module e mi sono posto una domanda. Quando uso un'intestazione (vedi esempio sotto), devo usare l'output subito dopo? Voglio dire, l'uso dell'intestazione significa anche che si sta uscendo di default quindi non ho bisogno di usare il command exit?

Scusa se questa è una domanda stupida ….

// cancel button clicked if (isset($_POST['cancel'])) { header("Location: http://localhost/admin/tracks.php"); exit; } echo '<p>$name</p>' 

Dovresti call exit() perché un header() non interromperà automaticamente l'esecuzione dello script – o se lo fa (onestamente non sono al 100% su questo), sicuramente non ferma lo script all'istante.

Ad esempio, prova questo codice:

 <?php header("Location: http://www.google.com"); unlink(__FILE__); ?> 

Questo piccolo script usa header() per redirect te a Google, quindi elimina se stesso. Se lo esegui, noterai che dopo essere stato reindirizzato, il file è stato ancora cancellato. Ciò significa che la chiamata allo unlink() stata ancora eseguita anche se la chiamata header() ti ha reindirizzato.

Uso exit dopo la chiamata header-> location perché voglio poter fare affidamento ASSOLUTAMENTE sul fatto che lo script non supererà la chiamata header-> location.

Se c'è un bug da qualche parte e lo script inizia a generare l'output PRIMA della chiamata header-> location, la chiamata fallirà e l'esecuzione dello script continuerà normalmente (a less che non chiami exit)

Sebbene le risposte sopra riportte siano ottime, se non si è sicuri del path del codice, ciò potrebbe portre a risultati imprevisti. Ad esempio, se stai utilizzando un framework che si basa sul fatto che l'esecuzione del codice verrà eseguita dall'inizio alla fine, potresti inavvertitamente interromperlo.

Questo potrebbe andar bene dal punto di vista dell'utente poiché verranno comunque reindirizzati e non saranno più saggi, ma considera quanto segue:

Stai utilizzando un framework (sistema operativo o personalizzato) che prevede di registrare i reindirizzamenti o impostare intestazioni aggiuntive (o un numero qualsiasi di altri elementi). Chiamando exit , stai aggirando quella logica e quindi potresti get risultati imprevisti.

Quindi, in breve, sì, i methods di cui sopra functionranno, solo una parola di caucanvas per sapere cosa vi aspettate che accada prima di cortocircuitarlo.

Generalmente l'output non viene inviato (a seconda del buffering dell'output e così via) se si esegue il reindirizzamento in questo modo, ma come mostrato dall'esempio unlink () lo script non muore con header ().

Quindi le chiamate exit () o die () sono necessarie se si desidera impedire che lo script continui dopo il reindirizzamento.

usa l'intestazione significa anche che sta uscendo di default

Come mai? Cosa succede se la tua intestazione non è Location: one ma Content-type: o Cache-control o quant'altro?