Ограничение заключается в том, что заголовки должны отправляться до отправки любого другого вывода.
Самое простое решение - включить буферизацию вывода. Таким образом, вы можете установить заголовки в любом месте, пока буфер не будет очищен.
Вы можете сделать этот эфир, используя функцию ob_start
Или используя директиву output_buffering
ini в файле php.ini.
Как указал Брэд, это не самое эффективное решение, так как оно требует памяти сервера для буферизации вывода и задерживает отправку первого байта.
Лучшим решением было бы найти то, что отправляет вывод перед вызовом header
, и, если возможно, задержать вывод.
Хороший компромисс, который я нашел, состоял в том, чтобы включить буферизацию вывода с использованием ob_start
в начале и очистить буфер сразу после того, как элемент страницы <head>
сгенерирован и все необходимые заголовки установлены. Таким образом, любой дальнейший вывод не буферизуется. Единственное, о чем нужно позаботиться, это то, что все вызовы заголовков выполняются до вызова ob_end_flush
.