PHP中的头文件是如何工作的?

6

在浏览php.net网站时,我看到了一个header的示例,它说会给我报错。我复制了它,并在WAMP上执行,但是没有显示任何错误,而是重定向到了该网站。

<html>
<?php
/* This should give an error (but it doesn't!). Note the output
 * above, which is before the header() call */
header('Location: http://www.example.com/');
?>

我想知道,在我的WAMP中,这是否是正确的行为,还是出现了错误,或者我在php.ini文件中启用了特定的设置使其工作!如果有人需要复制我的php.ini,请告诉我。

谢谢, Tanmay

2个回答

4

看起来你启用了output_buffering。

http://php.net/manual/en/outcontrol.configuration.php

标准配置会因为已经输出数据而报错,并且需要先输出头信息。输出缓冲可以让头信息在其他输出之后出现在代码中,但是由于缓冲区的原因仍然会先输出头信息。


我检查了我的php.ini文件,其中缓冲输出开启了。 仅出于好奇,如果我有3个不同的header('Location:....')命令,它不会执行前两个,将被重定向到第三个站点吗? - jtanmay
@jtanmay:虽然这是一个有趣的问题,但它不应该发生...您只能被重定向到单个位置,因此“良好的代码”永远不会创建多个位置头。 - Fosco

0

当任何文本被发送到浏览器时,头信息就会被发送,而且只能被发送一次。一旦 <html> 标签被发送,头信息也会随之发送,因此在此之后尝试使用 header 函数将会抛出“头信息已经发送”的错误。


OP问为什么它没有像他们预期的那样抛出错误。 - Blair McMillan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接