Установка заголовков PHP внутри метода функции / класса - PullRequest
1 голос
/ 18 октября 2011

Я написал класс, который выводит информацию о типе содержимого в качестве заголовка, однако это не работает. После прочтения PHP.net он заявляет

Помните, что header () должна быть вызвана перед тем, как отправляется либо обычными тегами HTML, пустыми строками в файле, либо из PHP. Это очень распространенная ошибка при чтении кода с помощью include () или require (), функции, или другая функция доступа к файлу, и имеют пробелы или пустые строки, которые выводятся до вызова header ().

Я не уверен, что делать, так как не могу жестко кодировать тип содержимого везде, где это необходимо Кто-нибудь знает, можно ли вообще устанавливать заголовки в функциях / классах?

Ответы [ 2 ]

2 голосов
/ 18 октября 2011

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

Самое простое решение - включить буферизацию вывода. Таким образом, вы можете установить заголовки в любом месте, пока буфер не будет очищен.

Вы можете сделать этот эфир, используя функцию ob_start

Или используя директиву output_buffering ini в файле php.ini.

Как указал Брэд, это не самое эффективное решение, так как оно требует памяти сервера для буферизации вывода и задерживает отправку первого байта.

Лучшим решением было бы найти то, что отправляет вывод перед вызовом header, и, если возможно, задержать вывод.

Хороший компромисс, который я нашел, состоял в том, чтобы включить буферизацию вывода с использованием ob_start в начале и очистить буфер сразу после того, как элемент страницы <head> сгенерирован и все необходимые заголовки установлены. Таким образом, любой дальнейший вывод не буферизуется. Единственное, о чем нужно позаботиться, это то, что все вызовы заголовков выполняются до вызова ob_end_flush.

0 голосов
/ 18 ноября 2011

Заголовки отправлялись правильно все время, но я проверял ответ файла, который использовал, и не получал должным образом ответ от CURL, если это имеет смысл!Мне просто нужно было использовать:

$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
...