2012-01-31 69 views
1

讀取大型XML文件,我有一個巨大的XML文件(114 KB/1719線;見下文爲什麼我說巨大錯誤消息),我試着去閱讀它,因爲我已經有兩個類似的做文件之前。無法從PHP

其他兩個文件正常加載並且大小相當,唯一的區別是所涉及的文件包含阿拉伯文本。因此,這裏是PHP代碼:

$doc3 = new DOMDocument('1.0', 'utf-8'); 
$doc3->load($masternumber.'.xml'); 

和錯誤是:

警告:DOM文檔::負載()[domdocument.load]:過度深度文件:文件256使用XML_PARSE_HUGE選項:...

然後$doc3不加載文件。所以我修改了代碼:

$doc3->load($masternumber.'.xml', "LIBXML_PARSEHUGE"); 

我最終與另一warrning:

警告:DOM文檔::負載()預計參數2長,字符串中給定的...

$doc3再次爲空。

它有什麼問題?其他文件包含其他語言的相同文本並正確加載,但不是這一個?我正在使用PHP 5.3.9。

+0

它是一個常數。'$ doc3->負載($ masternumber'XML ',LIBXML_PARSEHUGE);' – Gordon 2012-01-31 14:01:01

+0

在旁註:當您使用任何load *方法並使用它在XML prolog中找到的任何內容時,DOMDocument將放棄您放入ctor中的任何內容,因此新的DOMDocument('1.0','utf- 8')毫無意義。 – Gordon 2012-01-31 14:04:22

回答

6

使用常量而不是字符串。

$doc3->load($masternumber.'.xml', LIBXML_PARSEHUGE); 

見完整的詳細信息DOMDocument::load()文檔。第二個參數是一個長整數,表示從list of constants中選擇的選項。

順便說一句,如果你需要多個選項以任何理由,它是通過使用按位或運算結合做|

// Multiple options OR'd together... 
// Just FYI, not specific to your situation... 
$doc3->load($masternumber.'.xml', LIBXML_PARSEHUGE|LIBXML_NSCLEAN); 
+2

對於「使用常量而不是字符串」+1。 -1爲答案的其餘部分。 -1沒有外部參考。 -1不解釋爲什麼需要「long」而不是「string」。表演不佳。 – salathe 2012-01-31 14:08:37

+0

@salathe鑑於OP已經知道使用LIBXML_PARSEHUGE,儘管不正確,我認爲OP已經找到相關文檔,但誤解了它。 – 2012-01-31 14:18:49

+2

我假設他讀了錯誤信息,直接來到這裏進行勺子餵食。 – salathe 2012-01-31 14:50:15