8

我有奇怪的错误,不知道如何在不浪费太多时间的情况下解决它。我的控制器中有一个方法,它应该使用以下方法返回 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())但我可能因为教义而弄得一团糟。

4

7 回答 7

20

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

另外,一个小提示...如果您的文件是纯 PHP,只需启动它,<?php不要关闭 PHP 标记。没有必要关闭它,然后您可以避免最后的空白行给您带来麻烦。

于 2012-04-10T20:42:59.830 回答
7

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

于 2016-06-06T18:42:06.110 回答
5

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

ob_start()

将第一件事放在您的脚本中,这将确保在您调用之前不会输出任何其他内容

ob_flush()

这对您来说可能不是必需的(ob_flush)。

另外,我不久前遇到过这个问题,其中包含在另一个脚本中间的脚本在结束 php 标记之后有一个字符,这导致该单个字符将标题向下推并使响应无效。

所以我会遵循布拉德的建议,除非你必须这样做,否则不要使用关闭 php 标签。

于 2012-04-10T20:48:20.797 回答
2

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

pcregrep -Mron '\n\<\?php' .
于 2015-06-09T14:06:54.850 回答
1

我遇到了同样的问题,问题来自我的一个 php 文件末尾的关闭 ?> 后的空白行。

仔细检查所有 php 文件并删除关闭?>

于 2018-06-05T13:58:13.600 回答
0

您几乎可以肯定在您的 PHP 标记之前或之后的某处有一个空行。解决它的一种方法是始终exitdie()在输出 XML 文件之后。这将切断您在代码末尾可能有的任何额外行。不过,您可以确保文件开头没有任何内容。

于 2012-04-10T20:44:59.947 回答
0

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

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

于 2013-05-16T10:32:28.690 回答