php header函数在不应该生成错误

时间:2009-04-08 12:48:45

标签: php header

我正在使用PHP 4.3.11,当我执行header总是响应时出现这样的错误

警告:无法修改标题信息 - 已在 d:\ folder \ file.php中发送的标题(在d:\ folder \ file.php:1处开始输出)在线 2

警告:无法修改标题信息 - 已在 d:\ folder \ file.php中发送的标题(在d:\ folder \ file.php:1处开始输出)在线 3 当前PHP版本:4.3.11

我用来生成此错误的代码是

<?php
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");   // Date in the past

    echo 'Current PHP version: ' . phpversion();

    // prints e.g. '2.0' or nothing if the extension isn't enabled
    echo phpversion('tidy');
?>

在php标签之前或之后没有空格或换行符,5.x版本中的相同代码只返回预期的php版本。

有任何线索吗?

提前致谢

修改 解决了!:我用西欧编码打开了文件并删除了BOM并且它有效。谢谢大家的帮助!

5 个答案:

答案 0 :(得分:5)

确保PHP块之前没有空行和不可见字符(例如UTF BOM),以便<?php真正是文件中的第一个。

答案 1 :(得分:5)

文件开头是否有UTF BOM

答案 2 :(得分:2)

如果您的文件除了php代码之外不包含任何其他内容,建议跳过php结束标记以避免文件末尾出现空格

答案 3 :(得分:0)

您获得的错误意味着整个脚本(包括其他文件)在调用header()函数之前发送一些输出。

您应该修改所有文件并查看是否有任何文件正在输出(使用echo()或print()),或者如果您在最后一个结束标记后错过了一些空格?&gt;

答案 4 :(得分:0)

这不太可能,但是有可能在php.ini中定义auto_prepend_file(也可能是.htaccess)。

http://at2.php.net/manual/en/ini.core.php - 这在每个脚本的开头都像require()。您可以通过查看phpinfo();输出来查看此内容。

但我也认为问题是utf-8 BOM。