2010-09-22 7 views
8

Ich erschien für PHP-Test, ihre ich wurde eine Frage gestellt, für die ich die Antwort nicht finden konnte.Interview Frage: Können wir ein Echo vor dem Header haben?

Die Frage ist so.

echo "MESSI is injured!!"; 
header("Location:somepage.php"); 

Interviewer wollen beide Header und Echo auf der gleichen Seite geschrieben werden.

Ich frage mich, wie es ist possible.It sollten einige Fehler geben wie

Header bereits gesendet von (Ausgabe begann bei .....

Ist es wirklich möglich, Echo und Header zu schreiben auf derselben Seite !!!

+0

Welche PHP-Test ist das? Wofür ist das? Tut mir leid, neugierig zu sein. –

Antwort

29

können Sie Output Buffering als

ob_start(); 
echo "MESSI is injured!!"; 
header("Location:somepage.php"); 
ob_end_flush(); 
verwenden

Das Problem ist, dass wir den Header nicht senden können, nachdem wir mit dem Senden der Ausgabe beginnen. Um dies zu lösen, puffern wir die Ausgabe. Die Funktion ob_start schaltet die Ausgangspufferung ein. Während die Ausgabepufferung aktiv ist, wird keine Ausgabe vom Skript (außer den Headern) gesendet, stattdessen wird die Ausgabe in einem internen Puffer gespeichert. So wird der echo Ausgang gepuffert. Als nächstes senden wir die Kopfzeile ohne Probleme, da wir noch keine Ausgabe ausgegeben haben. Schließlich rufen wir auf, um den Inhalt des internen Puffers zu löschen und die Pufferung der Ausgabe zu stoppen.

+1

Absolut richtig –

+0

Wenn Sie Ausgabepufferung aktiviert haben, wird * nichts * gesendet, bevor Sie es spülen. Nicht einmal Header. (iirc) –

3

Sie können es tun, solange alle Header-Aufrufe kommen, bevor eine Nicht-Header-Ausgabe gesendet wird (dies beinhaltet lästige Dinge wie Newlines/Leerzeichen). So

<?php 
header("Location:somepage.php"); 
echo "MESSI is injured!!"; 
?> 

sollte der Trick

+4

Does't ziemlich die Frage beantworten: schreibe Echo "" ** und dann ** Header() – codaddict

+0

Genau. Die Pufferung der Ausgabe sollte das Problem jedoch lösen. – matsolof