Вопрос интервью: Можем ли мы получить эхо перед заголовком? - PullRequest
12 голосов
/ 22 сентября 2010

Я появился для теста php, их мне задали один вопрос, на который я не смог найти ответ.

Вопрос такой:

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

Интервьюер хочет оба header и echo , которые должны быть записаны на одной странице.

Интересно, как это возможно?* заголовки уже отправлены (вывод начался в .....

Реально ли написать echo и заголовок на той же странице !!!

Ответы [ 2 ]

34 голосов
/ 22 сентября 2010

Вы можете использовать Выходная буферизация как

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

Проблема в том, что мы не можем отправить заголовок после начала отправки вывода. Чтобы решить эту проблему, мы буферизируем вывод. Функция ob_start включает буферизацию вывода. Пока активна буферизация вывода, из скрипта не отправляются выходные данные (кроме заголовков), вместо этого выходные данные сохраняются во внутреннем буфере Таким образом, вывод echo будет буферизован. Далее мы отправляем заголовок без каких-либо проблем, так как мы еще не выплюнули вывод. Наконец, мы вызываем ob_end_flush для очистки содержимого внутреннего буфера и прекращения буферизации вывода.

3 голосов
/ 22 сентября 2010

Вы можете делать это до тех пор, пока все вызовы заголовка поступают до того, как будет отправлен какой-либо вывод без заголовка (это включает такие неприятные вещи, как перевод строки / пробелы). Итак

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

должен сделать трюк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...