я использую PHP 7.1.11 на машине, которая работает на Windows 10 Home Single Language Edition.
я использую XAMPP сервер на моей машине.
Я использую следующие браузеры на этой машине:
Я знаю детали 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/
?
Зачем?
Если вы как-то используете выходная буферизация — или вручную, или потому что ваш PHP настроен на автоматическое сделайте это — вам все еще разрешено добавлять заголовки, пока начальный буфер не был очищен.
Что делает выходная буферизация, это то, на что намекает имя: поместите вывод в буфер, который будет отправлен на более поздней стадии, вместо немедленного вывода данных. Из-за этого, пока нет данных тела HTTP ответное сообщение отправлено, вы все еще можете отправить данные заголовка.
Чтобы проверить, настроен ли PHP для автоматической буферизации вывода, вы можете выполнить одно из следующих действий:
output_buffering
var_dump( ini_get( 'output_buffering' ) );
phpinfo();
(сбрасывает всю конфигурацию) и ищет строку output_buffering
Если выходная буферизация включена, значением будет либо размер буфера в байтах (если он настроен как таковой), либо "On"
или же true
, Или что-то в этом роде.
Других решений пока нет …