如何正确控制http状态代码?

时间:2011-11-27 16:21:37

标签: php http-status

在CodeIgniter中测试400错误处理时遇到了一个奇怪的事情。

  

消息:无法修改标头信息 - 已经发送的标头(输出从......开始)

http状态代码总是200,最后我发现在<?php ...之前有一个新行。然后我检查了php doc,发现了这个:

  

header()用于发送原始HTTP标头。有关HTTP标头的详细信息,请参阅»HTTP / 1.1规范。

     

请记住,在发送任何实际输出之前,必须通过普通HTML标记,文件中的空行或PHP来调用header()。

那么如何在php中正确设置http状态代码以确保它在任何输出之前? 我是php编程的新手。谢谢你的回复!

3 个答案:

答案 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 解决方案。