我有一个奇怪的错误,不知道如何解决它而不浪费太多时间。我的控制器中有一个方法应该使用:
返回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())
但是我可能因为学说而得到一个大混乱。
答案 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文件后始终exit
或die()
。这将切断代码末尾可能包含的任何额外行。但是,你应该确保文件开头没有。
答案 6 :(得分:0)
在Plesk更新后,我有一个空文件 /tmp/.tmp.err ,它在php配置中使用auto_prepend_file
自动上传。
因此,所有PHP脚本都附加了一个空字符串。一些独特的情况,但可能对某人有帮助。