Apache或PHP生成预谋换行符

问题描述 投票:4回答:4

我想产生一个PHP Web应用程序的XML文件:

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

奇怪的是,使用我的服务器时(PHP版5.3.8 / Apache的2.2.17和PHP版5.3.10-1 /阿帕奇2.2.22分别)的线料(十六进制0a)字符被插入到输出的开始,得到在无效的XML,不能使用。有one more online question about this,悬而未决。

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

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

  • 这是一个已知的bug /功能吗?
  • 它是一个配置问题?
  • 这是难辞其咎的,Apache或PHP?
  • 我需要升级我的服务器?我宁愿不。
php apache2 character prepend
4个回答
3
投票

这似乎是0a问题是由一个尾随引起我的主要PHP文件中包含一个PHP文件中输入字符。当我从包含文件中删除它,在我的输出0a字符消失。

我发现特别之处。这是我经历的PHP版本,和事实检验了社会各界的意见时,我还是得到了0a之间的不同处理的空白。

我没有更多的时间投入研究这个,但我的建议的人遇到类似的问题是检查在空白中是否包含文件可能发挥到方程。此外,应避免结束<?php标签由丹以下建议。


2
投票

也许这是一个编码的问题。如果您正在使用UTF8 with BOM,有在文件的开头一个多余的字符。请检查文件的编码,并将其转换为UTF8无BOM,以避免额外的字符。


2
投票

我只是碰到了这一点。把我和团队一小时追查。太奇妙了。我爱PHP这么多。

这是什么原因造成它为我们:

<php
  $code = "blah";
?php>

<EOF>

请注意NEWLINE在文件的THE END

PHP,在其所有的超然之美,会解释这个新行的东西你实际上是试图发送给别人沿着电线。这是HTML毕竟。其结果是,最大的一个换行符将被预置到您的回复,即使在多个PHP文件你包括以换行符路径结束。

就拿您包括或要求,如果他们在换行符结尾的任何文件,任何你回声或从当前的文件打印将与新行预加特殊照顾。

只是。真棒。


0
投票

在我的情况下,它是在开始换行

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.