PHP头信息已经发送错误

4
可能重复:

可能重复:
PHP已发送的标题

我有一个单独的php文件,其中包含以下代码:

<?php header("Location: somepage.php"); ?>

绝对不要在 PHP 开始或结束标签前后留空格,我正在得到


Warning: Cannot modify header information - headers already sent by (output started at C:\ ... \test.php:1

通常当我遇到这个错误时,1是问题的行号,但在这种情况下,第一行没有任何额外的空格。我只在页面上使用这段代码,没有包含任何其他文件。
我正在Windows XP上使用xampp。有什么想法是怎么回事或者如何跟踪真正引起问题的原因。
谢谢。

1
只是一个提示,如果您不需要输出任何未处理的内容,请不要使用闭合标签。 - Igor Zinov'yev
谢谢,我通常已经这样做了,只是为了避免这个错误。 - Joe
4个回答

11

很有可能您的文件中存在所谓的BOM(字节顺序标记)。根据您使用的编辑器,您需要关闭添加BOM的选项...


我正在使用Komodo Edit,以前从未出现过问题。我尝试过使用普通的记事本,但仍然存在问题。 - Joe
唔,我能想到的另一件事就是与 auto_prepend_file 有关的问题了……你有检查过你的 PHPInfo 吗?还有,你说你尝试使用记事本,你是直接在记事本中编写的吗?还是复制和粘贴(因为如果存在 BOM,则记事本可能不会显示它,但它可能已被复制)…… - ircmaxell
我通过创建一个新文件并使用不同的编辑器(Scite)来解决了问题。我只是输入了代码,而没有粘贴它。现在它正常工作了。就像你说的那样,这一定是BOM的问题。感谢您的帮助! - Joe
2
对于Komodo:http://docs.activestate.com/komodo/4.4/prefs.html(有一个禁用BOM添加的首选项)... - ircmaxell
链接在德语维基百科上。http://en.wikipedia.org/wiki/Byte_order_mark - Eva

0

尝试使用WAMP,它不会显示此错误,请确保您的代码前后没有空格。如果您使用的是Notepad ++或EditPlus,则转到格式并选择Unix格式,然后一切都应该正常工作。

或者

尝试将此放置在页面顶部:

<? ob_start(); ?>

然后在页面底部放置这行代码:

<? ob_flush(); ?> 

我不会仅为此安装wamp。而且,如果错误仍然存在,不修复它是没有帮助的。 - Joe
请查看已发布的解决方案,它应该能够满足您的需求。您将不会再遇到此警告。 - YCN
1
这并不是真正的修复,而是一种短暂的解决方法。我想要真正地解决这个问题。 - Joe

0

如果您确定不是BOM导致了错误,请检查您的httpd.conf和任何.htaccess文件是否在前面添加了其他文件。注意类似以下内容的东西:

<FilesMatch "\.(html?)$">
php_value auto_prepend_file /server/path/to/my/www_root/subdir/file.ext"
</FilesMatch>

同时也请检查您的PHP.ini文件:http://de.php.net/manual/en/ini.core.php#ini.auto-prepend-file


0

尝试使用记事本将您的内容复制/粘贴到另一个新文件中


尝试过了,但没有成功。仍然出现错误。 - Joe

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