php:从不知名的空行

时间:2012-04-10 20:41:26

标签: php debugging

我有一个奇怪的错误,不知道如何解决它而不浪费太多时间。我的控制器中有一个方法应该使用:

返回xml
  header("Content-type: text/xml");
  header("Content-Disposition: attachment; filename=output.xml");
  header("Pragma: no-cache");
  header("Expires: 0");

问题是由于空行而输出无效xml,我不知道它来自哪里,你知道如何解决这个问题吗?也许忽略这条空行或什么?我不想调试整个框架......我试图使用var_dump(debug_backtrace())但是我可能因为学说而得到一个大混乱。

7 个答案:

答案 0 :(得分:16)

几乎总是,<?php ?>代码之前或之后会有一个空行。如果不在您的主文件中,请查看您的包含。

另外,一点提示......如果你的文件是纯PHP,只需用<?php启动它,永远不要关闭PHP标记。关闭它是没有必要的,然后你在最后避免空行导致你麻烦。

答案 1 :(得分:4)

此外,任何错误消息都将在标题之前打印到文档中。但有时在没有错误时很难找到罪犯。试试这个:

ob_start()

首先在您的脚本中放置,这将确保在您调用

之前不会输出任何其他内容
ob_flush()

您可能不需要(ob_flush)。

此外,我刚才遇到过这个问题,其中包含在另一个脚本中间的脚本在关闭php标记之后有一个字符,导致该单个字符向下推动标题并使响应无效。

所以我会遵循Brad提出的建议,除非你必须使用关闭php标签。

答案 2 :(得分:2)

使用ob_clean()清除具有不需要的换行符的缓冲区

答案 3 :(得分:1)

我不时遇到这个问题。这可能非常令人沮丧。 :-) 无论哪种方式 - 我觉得这很有帮助。这将显示带有空行后跟php开始标记的文件。它会显示误报,但有助于缩小搜索范围。

pcregrep -Mron '\n\<\?php' .

答案 4 :(得分:1)

我有同样的问题,问题来自关闭后的空行?&gt;在我的一个php文件的末尾。

仔细检查所有php文件并删除结束?&gt;

答案 5 :(得分:0)

你的PHP标签之前或之后几乎肯定有一个空行。解决此问题的一种方法是在输出XML文件后始终exitdie()。这将切断代码末尾可能包含的任何额外行。但是,你应该确保文件开头没有。

答案 6 :(得分:0)

在Plesk更新后,我有一个空文件 /tmp/.tmp.err ,它在php配置中使用auto_prepend_file自动上传。

因此,所有PHP脚本都附加了一个空字符串。一些独特的情况,但可能对某人有帮助。