2010-04-03 154 views
9

要允许缓存PHP生成的文件,我想确保'Pragma:no-cache'标题为而不是集合。但是,如何删除可能已经设置的标题?在PHP中删除标题

也就是说,它可能是可能的,在某些地方的代码有人写header('Pragma: no-cache');现在我想确保,头不发送。

是否足以做到这一点:

header('Pragma:'); 

或者是有什么样delete_header()(这很显然,是无证或隐藏良好)?

+2

既然PHP是开源软件,那么在那里有一些“没有文档,很好隐藏”的东西是无稽之谈。 – selfawaresoup 2010-04-03 18:04:14

+3

@Techpriester:我知道几十个完全没有记录的操作系统项目,隐藏起来也可能是无意的。 – Boldewyn 2010-04-03 21:11:01

回答

13

header_remove()由于PHP 5.3

header_register_callback()也即将上市

+0

很酷,谢谢。很遗憾,PHP男孩最近才想到这一点(毕竟,HTTP处理是PHP的核心应用领域)。 – Boldewyn 2010-04-03 21:14:09

+4

php 5.3之前有什么解决方案?我目前有PHP/5.2.17 – Pacerier 2011-09-25 16:27:54

+0

@Pacerier for php <5.3.0“标题('Pragma:');”做这项工作。浏览器不会收到任何'Pragma'标题(甚至空白)。 – maliayas 2012-08-19 23:08:06

2

你可以通过传递第二个参数给header()覆盖先前设置的标题:

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

检查manual for header()

+0

我知道,但问题是,如果这是足够的,即如果为header()提供'Pragma:'将从发送列表中删除它。 – Boldewyn 2010-04-03 21:12:54

+1

@Boldewyn不,它不会从发送列表中删除它。它会覆盖它没有值,这意味着虽然预期的结果是相同的,但我们发送不必要的字节,因为我们仍然必须通过线路发送字符串“Pragma:”。 – Pacerier 2012-07-12 00:40:24

1

'杂注'标题行为不是由规范定义的 - 尽管wi我们相信,发送一个'Pragma:No-cache'头文件会对浏览器产生一些影响,实际上它几乎被普遍忽略(并且永远不会被我用过的任何PHP安装程序返回)。

要告诉浏览器不要缓存内容,可以通过过期的日期头,带有无缓存值的缓存控制头,或者(如果你想偷偷摸摸) :日期'标题。在没有任何这些类型的头部的情况下,客户端不得高速缓存该页面。

因此,相反,如果您希望页面可缓存,请设置expires和cache-cntrol标头。

C.

+0

这不回答这个问题..问题是关于“在PHP中删除头”而不是如何实现缓存。 – Pacerier 2011-09-25 16:32:23

+1

不是 - 这是问题的标题,但是OP试图实现的内容是使内容可缓存 - 删除一个杂注标题与此无关 – symcbean 2011-09-26 08:23:03

+0

问题是“如何删除可能已经设置的标题?” – Pacerier 2013-03-09 11:43:41

3

我知道这个问题已经老了,已经回答了。但是其中一些答案可能会给人留下错误的印象。请放心,如果您的响应标题包含Pragma: no-cache,那么绝对会阻止Web浏览器缓存资源,而不管其他设置如何。

所以当然,如果您至少使用PHP 5.3,您可以使用header_remove('Pragma');删除Pragma标题。