我在使用PHP 5.4.21的IIS 7服务器上使用PHP脚本生成XML数据。我注意到这些数据没有通过XML验证,因为看起来随机的标签会将它们的“<”或“< /”从它们上剥离。我运行了一些测试,通过将预期的XML输出放在一个2个单独的文件中,一个扩展名为.php(没有实际的PHP)和一个扩展名为.xml的文件(它们的内容完全相同)来运行一些测试。 PHP文件,但这不会通过PHP解释器)。 .xml扩展名文件没有任何字符在.php扩展名文件中消失。然后在我的本地WAMP服务器上运行相同的PHP脚本也工作得很好。这一切都让我认为这个问题必须与PHP。问题是我不知道为什么会发生这种情况,而且迄今为止我还没有成功搜索Google的答案。IIS 5.4上的PHP 5.4.21在标签中删除“<”和“</”
下面是导致错误的代码示例,以便您可以了解正在发生的事情。
<?php
print "<?xml version=\"1.0\"?>\n";
print "<appguide>\n";
print "\t<wheels>\n";
for ($i = 0; $i < 80; $i++) {
print "\t\t<wheel>\n";
print "\t\t\t<someone>{$i}</someone>\n";
print "\t\t\t<set>{$i}</set>\n";
print "\t\t\t<us>{$i}</us>\n";
print "\t\t\t<up>{$i}</up>\n";
print "\t\t\t<the>{$i}</the>\n";
print "\t\t\t<bomb>{$i}</bomb>\n";
print "\t\t</wheel>\n";
}
print "\t</wheels>\n";
print "</appguide>\n";
?>
这应该简单地打印相同的数据中的“<车轮>”一节中的80倍。但与此观察它的源IIS7/PHP5.4.2机器上出现:
<wheel>
<someone>30</someone>
<set>30set>
<us>30</us>
<up>30</up>
<the>30</the>
<bomb>30</bomb>
</wheel>
正如你可以看到“< /”从缺“< /集>”,在第31次迭代中循环。即使我不使用PHP来生成XML数据,并将预期的输出粘贴到文件中(与XML文件相同),它仍然会丢失括号。
那么有没有人有任何线索可能导致这种?!
更新为询问了HTTP响应头的人:
Live服务器
Content-Length:10326
Content-Type:text/html
Date:Tue, 18 Mar 2014 22:35:47 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:PHP/5.4.21
X-Powered-By:ASP.NET
本地服务器
Connection:Keep-Alive
Content-Type:text/html; charset=ISO-8859-1
Date:Tue, 18 Mar 2014 22:35:19 GMT
Keep-Alive:timeout=5, max=99
Server:Apache/2.2.11 (Win32) PHP/5.3.1
Transfer-Encoding:chunked
X-Powered-By:PHP/5.3.1
奇怪。你的代码对我来说工作得很好。 (PHP 5.5.3-1ubuntu2.2) – Mike
是的。就像我在原文中所说的那样,“在我的本地WAMP服务器上运行相同的PHP脚本运行良好”。因此,我发布了IIS和PHP版本(这两个版本都不符合你的测试)。 –
两个服务器中的HTTP响应标头是否相同? – Mike