Почему я не получаю «Предупреждение: невозможно изменить информацию заголовка — заголовки уже отправлены», как я ожидал получить?

я использую PHP 7.1.11 на машине, которая работает на Windows 10 Home Single Language Edition.

я использую XAMPP сервер на моей машине.

Я использую следующие браузеры на этой машине:

  1. Google Chrome (версия 62.0.3202.94 (официальная сборка) (64-разрядная версия))
  2. Firefox Quantum (57.0.1 (64-разрядная версия))
  3. Opera (Версия: 49.0.2725.47)
  4. Microsoft Edge 41.16299.15.0

Я знаю детали header() функция и как это работает.

Но следующая программа ведет себя очень странно во всех четырех вышеперечисленных браузерах. Даже после отправки вывода клиенту функция header () работает.

Как это может быть возможным?

Ниже приведен мой код (он перенаправляется на указанный мной URL):

    <!DOCTYPE html>
<html>
<body>
<p>Welcome to my website!</p><br />
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
if($test) {
echo 'Welcome to my website<br />You\'re in!';
} else {
header('Location: http://www.espncricinfo.com');
}
?>
</body>
</html>

Я ожидал получить предупреждение «Невозможно изменить информацию заголовка — заголовки уже отправлены» но удивительно, что меня перенаправили на URL http://www.espncricinfo.com/?

Зачем?

0

Решение

Если вы как-то используете выходная буферизация — или вручную, или потому что ваш PHP настроен на автоматическое сделайте это — вам все еще разрешено добавлять заголовки, пока начальный буфер не был очищен.

Что делает выходная буферизация, это то, на что намекает имя: поместите вывод в буфер, который будет отправлен на более поздней стадии, вместо немедленного вывода данных. Из-за этого, пока нет данных тела HTTP ответное сообщение отправлено, вы все еще можете отправить данные заголовка.


Чтобы проверить, настроен ли PHP для автоматической буферизации вывода, вы можете выполнить одно из следующих действий:

  1. проверьте файл конфигурации php.ini и найдите строку output_buffering
  2. var_dump( ini_get( 'output_buffering' ) );
  3. phpinfo(); (сбрасывает всю конфигурацию) и ищет строку output_buffering

Если выходная буферизация включена, значением будет либо размер буфера в байтах (если он настроен как таковой), либо "On" или же true, Или что-то в этом роде.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]