2010-09-22 11 views
8

Pojawiłem się dla testu php, ich zadawano mi jedno pytanie, na które nie mogłem znaleźć odpowiedzi.Pytanie z wywiadu: Czy możemy uzyskać echo przed nagłówkiem?

Pytanie jest podobne.

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

Dziennikarz chcą zarówno nagłówek i echo być napisane na tej samej stronie.

Zastanawiam się, jak to wszystko possible.It powinien dać jakiś błąd jak

nagłówki już wysłane przez (wyjście rozpoczęła się .....

Czy to naprawdę możliwe, aby napisać echo i nagłówka na tej samej stronie !!!

+0

Co php Badanie to jest? Po co to jest? Przykro mi być wścibskim. –

Odpowiedz

29

można użyć Output Buffering jak

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

Problem polega na tym, że nie możemy wysłać nagłówka po rozpoczęciu wysyłania danych wyjściowych. Aby rozwiązać ten problem, buforujemy wyjście. Funkcja ob_start włącza buforowanie wyjścia. Podczas buforowania wyjścia nie są wysyłane żadne dane wyjściowe ze skryptu (inne niż nagłówki), zamiast tego dane wyjściowe są zapisywane w wewnętrznym buforze. Tak więc wyjście echo będzie buforowane. Następnie wysyłamy nagłówek bez żadnego problemu, ponieważ nie wypluliśmy jeszcze żadnego wyjścia. Na koniec wywołujemy ob_end_flush, aby opróżnić zawartość wewnętrznego bufora i zatrzymać buforowanie wyjściowe.

+1

Absolutnie w prawo –

+0

Właściwie jeśli masz buforowanie wyjścia, * nic * zostanie wysłane zanim je opróżnisz. Nawet nagłówków. (iirc) –

3

Możesz to zrobić tak długo, jak wszystkie wywołania nagłówkowe są wysyłane przed wysłaniem jakichkolwiek nie-nagłówkowych danych wyjściowych (w tym brzydkie rzeczy, takie jak znaki nowej linii/spacji). Więc

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

powinno wystarczyć

+4

Nie można dość odpowiedzieć na pytanie: Napisz echo "" **, a następnie ** nagłówek() – codaddict

+0

Dokładnie. Buforowanie wyjściowe powinno jednak rozwiązać problem. – matsolof

Powiązane problemy