2010-10-21 16 views
1
$doc = new DOMDocument(); 
if ($doc->load('http://foo.com/bar.xml')) { 
    // good 
} else { 
    // wtf happened? 
} 

我可以從運行PHP代碼的位置wget http://foo.com/bar.xml,所以我知道URL是可訪問的。我認爲它必須是HTTP錯誤以外的東西。什麼會導致DOMDocument.load無法從可訪問的URL加載XML?

我不確定還有什麼可能導致失敗。也許是一個解析問題? XML似乎是有效的(並且通過了W3C的驗證測試)。據我所知,從documentation,沒有辦法確定爲什麼發生負載故障。

這裏的XML:

<response> 
    <version>8</version> 
    <minversion>1</minversion> 
    <url>api.asp?</url> 
</response> 

回答

4

我終於把範圍縮小到一個名爲PHP configuration settingallow_url_fopen,它被設置爲Off運行腳本的服務器上。

我修改了php.ini文件啓用此設置:

allow_url_fopen = On 

現在DOMDocument.load可以從遠程URL加載XML。

警告:顯然有一些security issues永久保持此設置。

2

補充一點:

libxml_use_internal_errors (true); 
    $doc = new DOMDocument(); 
    $doc -> recover = true; 
    $doc -> strictErrorChecking = false; 
+0

這對我有什麼用? (我不是一個PHP傢伙,這是我正在處理的一次性事情) – 2010-10-21 02:12:46

+0

它只是簡單地抑制錯誤,並允許您的代碼在失敗的情況下繼續。檢查確切的問題是什麼,附加以下內容:'var_dump(libxml_get_errors());' – stillstanding 2010-10-21 02:15:13

+0

哦,謝謝!我的代碼繼續(它碰到'else'子句),但我需要知道爲什麼。希望'var_dump'會告訴我什麼是錯的。 – 2010-10-21 02:28:40

相關問題