@wideShift

Как работает отправка заголовков в PHP?

Вот есть функция header, она отправляет заголовки браузеру. По документации до нее ничего не может быть.
У меня вопросы:
1) Как в общем работает механизм: сначала при обращении к php сценарию запоминаются все заголовки, потом выполняется php код и в итоге отправляется страница вместе с запомненными заголовками?
2) Если мое суждение (выше) верно, то почему до header ничего нельзя вывести?
  • Вопрос задан
  • 332 просмотра
Решения вопроса 2
DevMan
@DevMan
ответ состоит из заголовков и содержимого. и именно в таком порядке.
заголовок1
заголовок2
.....
заголовокX

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

и это не конкретно PHP, так работает HTTP.
Ответ написан
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Потому что протокол HTTP имеет вполне определенный формат

Сначала заголовки, потом два перевода строки, далее содержимое.
Понятно, что содержимое и заголовки нельзя перемешивать.

https://developer.mozilla.org/ru/docs/Web/HTTP/Ove...
https://habr.com/ru/post/215117/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Можно добиться того что описали в п.1 если в начале скрипта добавить ob_start();

<?php
ob_start();

echo '123';
header('Content-Type: text/html');
echo '345';


в данном случае ob_start() буфферизирует любой вывод и не посылает его (в обработчик на стороне веб-сервера) до окончания работы скрипта, а все header() отправляются сразу же.

p.s. предупреждаю что приведённый выше пример не рекомендуется к использованию и может привести к появлению трудноуловимых багов. И лучше организовывать свой код так чтобы любой вывод приложения логически шёл в конце, после отправки всех нужных header'ов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
29 мар. 2024, в 15:28
10000 руб./за проект
29 мар. 2024, в 15:11
50000 руб./за проект
29 мар. 2024, в 15:06
50000 руб./за проект