IIS 7上的PHP 5.4.21在标签中删除“&lt;”和“<! - ” - >

时间:2014-03-18 22:11:09

标签: php xml iis iis-7

我使用PHP 5.4.21在IIS 7服务器上使用PHP脚本生成XML数据。我注意到数据没有通过XML验证,因为看似随机的标签会有“&lt;”或“&lt; /”从他们身上剥离。我运行了一些测试,看看问题是什么,将预期的XML输出放在2个单独的文件中,一个扩展名为.php(其中没有实际的PHP),另一个扩展名为.xml(完全相同的内容)。 php文件,但这不必通过PHP解释器)。 .phml扩展名文件没有任何字符消失。然后在我的本地WAMP服务器上运行相同的PHP脚本也运行良好。这一切都让我认为问题必须与PHP有关。问题是我不知道为什么会发生这种情况,到目前为止我还没有成功地在谷歌搜索答案。

以下是导致错误的代码示例,以便您可以更好地了解正在发生的事情。

<?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";
?>

这应该只是在“&lt; wheels&gt;”中打印80次相同的数据部分。但是在IIS7 / PHP5.4.2机器上查看它的来源就是这样:

<wheel>
    <someone>30</someone>
    <set>30set>
    <us>30</us>
    <up>30</up>
    <the>30</the>
    <bomb>30</bomb>
</wheel>

正如您所见,“&lt; / set&gt;”中缺少“&lt; /”在循环的第31次迭代中。即使我不使用PHP生成XML数据并将预期的输出粘贴到文件中(与XML文件相同),它仍然会丢失括号。

那么有没有人知道可能导致这种情况的原因?!

询问有关HTTP响应标头的人员的更新:

直播服务器

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

1 个答案:

答案 0 :(得分:0)

有时候最奇怪的错误与编码有关。在这个独特的

中,IIS7可能有一些特殊的秘密含义
t>30</s

组合 - 它只在循环中发生一次,在31次迭代中。

我无法访问IIS,但作为测试,我尝试暂时重命名

<set>

标记并查看是否有任何更改。