Apache 或 PHP 生成前置换行符

Gru*_*ber 5 php apache2 character prepend

我正在尝试在 PHP Web 应用程序中生成一个 XML 文件:

<?php
... 
header('Content-Type: application/xml');
header('Content-Disposition: attachment; filename=test.xml');
echo "<?xml version=\"1.0\"?>\r\n" . 
...
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当使用我的服务器(分别是 PHP 版本 5.3.8/Apache 2.2.17 和 PHP 版本 5.3.10-1/Apache 2.2.22)时,在输出的开头插入了一个换行符(十六进制0a,导致无法使用的无效 XML。还有一个关于这个的在线问题,未解决。

所以如果我尝试echo "bug";我得到 4 个字节,而不是 3 个:0a 62 75 67

但是,在本地使用 WAMP 服务器(PHP 5.4.3/Apache 2.4.2)时,我得到 3 个字节:62 75 67.

  • 这是一个已知的错误/功能吗?
  • 是配置问题吗?
  • 应该归咎于 Apache 还是 PHP?
  • 我必须升级我的服务器吗?我宁愿不。

Gru*_*ber 3

问题似乎0a是由我的主 PHP 文件包含的 PHP 文件中的尾随 Enter 字符引起的。当我从包含文件中删除它时,0a输出中的字符消失了。

0a我发现这一点的奇特之处在于我经历过的 PHP 版本之间对空格的不同处理,以及在测试社区建议时我仍然得到的事实。

我没有更多的时间对此进行研究,但我对遇到类似问题的人的建议是检查包含文件中的空格是否会影响方程式。此外,请避免<?php按照下面 Dan 的建议结束标签。