我在使用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