2010-04-03 2 views
9

Чтобы разрешить кеширование сгенерированного PHP файла, я хочу убедиться, что заголовок «Pragma: no-cache» равен , а не. Однако как удалить уже установленный заголовок?Удалить заголовок в PHP

То есть, это может быть возможным, что где-то в коде кто-то написал header('Pragma: no-cache');, и теперь я хочу убедиться, что заголовок не отправлен.

Достаточно ли это сделать:

header('Pragma:'); 

или есть что-то вроде delete_header() (которая, по-видимому, быть не документированы или хорошо скрытой)?

+2

Поскольку PHP - это программное обеспечение с открытым исходным кодом, было бы бессмысленно иметь что-то «недокументированное и хорошо скрытое» там. – selfawaresoup

+3

@Techpriester: Я знаю десятки полностью недокументированных проектов ОС и хорошо скрытые также могут быть непреднамеренными. – Boldewyn

ответ

13

header_remove() Начиная с PHP 5.3

header_register_callback() также скоро

+0

Прохладный, спасибо. Жаль, что мальчики из PHP подумали об этом совсем недавно (в конце концов, обработка HTTP является основной областью применения PHP). – Boldewyn

+4

Каковы решения для php 5.3? В настоящее время у меня есть PHP/5.2.17 – Pacerier

+0

@Pacerier для заголовка php <5.3.0 "('Pragma:');" делает работу. Браузер не получает заголовок «Прагма» (даже пустой). – maliayas

2

Вы можете изменить ранее установленный заголовок, передав второй аргумент header():

void header (string $string [, bool $replace = true [, int $http_response_code ]]) 

Проверьте manual for header()

+0

Я знаю это, но вопрос в том, достаточно ли этого, т. Е. Если предоставление только «Pragma:» для header() приведет к его удалению из списка отправленных. – Boldewyn

+1

@Boldewyn Нет, это не удалит его из списка отправленных. Он будет переопределять его без значения, что означает, что, хотя предполагаемый результат тот же, мы отправляем ненужные байты, так как нам все равно придется отправлять строку «Pragma:» по проводу. – Pacerier

1

Поведение заголовков «прагма» не определяется спецификацией - несмотря на wi полагая, что отправка заголовка «Pragma: No-cache» окажет некоторое влияние на браузер, на самом деле он почти повсеместно игнорируется (и никогда не возвращается какой-либо установкой php, которую я использовал).

Чтобы сообщить обозревателю, что кеширование содержимого не выполняется с помощью заголовка expires с датой в прошлом, заголовок Cache-Control со значением без кэша или (если вы хотите быть подлым) с помощью параметра «Варьируется» : Дата '. В отсутствие любого из этих типов заголовков клиент не должен кэшировать страницу.

Итак, если вы хотите, чтобы страница была кешируемой, установите заголовки expires и cache-cntrol.

C.

+0

Это не отвечает на вопрос. Вопрос заключается в «Удалить заголовок в PHP», а не о том, как реализовать кэширование. – Pacerier

+1

Нет - это название вопроса, однако то, что пытается сделать OP, состоит в том, чтобы сделать кешируемое содержимое - удаление заголовка прагмы не имеет отношения к этому – symcbean

+0

, вопрос заключается в том, «как удалить уже установленный заголовок?» – Pacerier

3

Я знаю, что этот вопрос старый и уже ответил. Но некоторые ответы могут оставить людей с неправильным впечатлением. Будьте уверены, что если ваши заголовки ответов содержат Pragma: no-cache, это фактически фактически не позволит веб-браузеру кэшировать ресурс независимо от других настроек.

Так что, конечно, если вы используете хотя бы PHP 5.3, вы можете удалить заголовок Pragma, используя header_remove('Pragma');.

Смежные вопросы