PHP:空行不知从何而来


php: empty line from nowhere

我有奇怪的错误,不知道如何在不浪费太多时间的情况下解决它。我的控制器中有一个方法,它应该使用以下方法返回 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 文件后始终exitdie()。这将切断代码末尾可能具有的任何额外行。不过,由您来确保文件开头没有

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

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

相关文章:
  • 没有找到相关文章