在CodeIgniter中测试400错误处理时遇到了一个奇怪的事情。
消息:无法修改标头信息 - 已经发送的标头(输出从......开始)
http状态代码总是200,最后我发现在<?php ...
之前有一个新行。然后我检查了php doc,发现了这个:
header()用于发送原始HTTP标头。有关HTTP标头的详细信息,请参阅»HTTP / 1.1规范。
请记住,在发送任何实际输出之前,必须通过普通HTML标记,文件中的空行或PHP来调用header()。
那么如何在php中正确设置http状态代码以确保它在任何输出之前? 我是php编程的新手。谢谢你的回复!
答案 0 :(得分:2)
那么如何在php中正确设置http状态代码以确保它在任何输出之前?
在执行任何创建输出的操作之前调用header()
(包括将空格字符放在<?php
部分之外)。
答案 1 :(得分:1)
正如其他人所说,你必须在任何其他输出之前发送标题(即使用header()
)。
经常会发生的一件事是,在关闭PHP标记之后,有时会包含无意中在其中包含换行符的文件。 e.g。
<?php
/*
* This is a file of PHP code
*/
/*
* file ends here
*/
?>
__________________________ (actual end of file)
# unexpected newline above gets sent as output
为了减少这种可能性,您可以故意省略关闭的PHP标记。该文件将被解析为PHP直到结束,因此从包含文件发送虚假换行符或空格的可能性要小得多。
根据您的编辑器,您还可以将其设置为显示空白(回车,空格,制表符),这可以帮助您尝试消除脚本中的意外输出(例如,Eclipse和Notepad ++都可以这样做)。
答案 2 :(得分:0)
请先将您的header()
功能发送给访问者。
如果在调用header()
之前无法确定返回的内容,请在PHP脚本的开头添加ob_start()
函数。
虽然它会起作用,但我仍然建议你清理代码,不要让数据输出。更好的做法是始终了解您自己的代码中发生的事情,而不是回到 patch 解决方案。