我有奇怪的错误,不知道如何在不浪费太多时间的情况下解决它。我的控制器中有一个方法,它应该使用以下方法返回 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())
但我得到了一个大混乱,可能是因为教义。
几乎总是,在您的 <?php ?>
标签之前或之后都会有一个空行。 如果不在您的主文件中,请查看您的包含。
另外,一个小提示...如果你的文件是纯PHP,只需用<?php
启动它,永远不要关闭PHP标签。 关闭它不是必需的,然后避免最后的空行给您带来麻烦。
使用 ob_clean()
清除具有不需要的换行符的缓冲区
此外,任何错误消息都将打印到标题之前的文档中。 但有时在没有错误的情况下很难找到罪犯。试试这个:
ob_start()
将第一件事放在脚本中,这将确保在您调用之前没有其他输出
ob_flush()
这对您(ob_flush)来说可能不是必需的。
另外,我不久前遇到了这个问题,其中一个脚本包含在另一个脚本中间的脚本在结束 php 标签之后有一个字符,这导致该单个字符向下推标头并使响应无效。
所以我会遵循 Brad 的建议,除非你不得不这样做,否则你不要使用关闭 php 标签。
我不时会遇到这个问题。这可能非常令人沮丧。:-)无论哪种方式 - 我发现这很有帮助。这将显示带有空行后跟 php 开始标记的文件。它将显示误报,但有助于很好地缩小搜索范围。
pcregrep -Mron ''n'<'?php' .
我遇到了同样的问题,问题来自关闭后的空白行>在我的一个 php 文件末尾。
仔细检查所有 php 文件并删除关闭 ?>
几乎可以肯定,在PHP标签之前或之后的某个地方有一个空行。修复它的一种方法是在输出 XML 文件后始终exit
或die()
。这将切断代码末尾可能具有的任何额外行。不过,由您来确保文件开头没有
在 Plesk 更新后,我有一个空文件/tmp/.tmp.err,它在 php 配置中自动预置了auto_prepend_file
。
因此,所有 PHP 脚本都以空字符串为前缀。一些独特的情况,但可能对某人有所帮助。