2017-10-15 45 views
0

你能幫我解決一下這個問題嗎,能夠解析和合並大約12個xml文件,每個文件有~5個大小,最終有一個全局文件。解析併合並很多xml文件,內存不足

目前,我使用一個cron運行腳本(一symfony框架命令)

對於每個I同捆JMSSerializerBundle反序列化文件,它允許創建從XML文件中的對象。

而且我有內存問題。我認爲這是由於這種反序列化。

所以我的問題是,

  • 你知道更好的方法來做到這一點STUP,如果我用的SimpleXML解析替換此反序列化這個包,你認爲它消耗更少的內存?

  • 另外,如果我將文件保存在變量中,Redis是否會更改任何內容?

  • 而且,最後一個問題,如果我使用數據庫,例如,我將文件保存在一個表中,然後檢索表中的所有記錄,並使用它創建全局xml文件,是否可以一個好主意? 或者以幾個步驟(每次3個文件)構建全局文件,每次將其保存在一個表中並每次以簡單數組檢索數據。

非常感謝您的幫助。

+1

如果您在使用SimpleXML時遇到內存問題,您應該切換到使用像[XMLReader](http://www.php.net/manual/en/class.xmlreader.php)這樣的pull解析器。 –

+0

組合XMLReader和XMLWriter應該能夠讓你一次構建整個文件。這取決於您在處理數據的同時需要處理的數量,您可以一次處理它們。 –

+0

是的,我打算使用XMLReader謝謝你們。 – sakados

回答

0

如果這是通過命令行完成的任務之一,那麼您可以在CLI腳本的開頭使用ini_set('memory_limit', -1);將PHP的memory_limit設置爲-1

這顯然不是一個請求的選項,因爲單個請求可能會佔用整個系統的內存。另外請注意,您顯然仍受可用系統內存的限制,因此您可能仍會遇到此問題。

正如在評論中已經建議的那樣,您可以通過使用像這樣的解析器來減少內存使用量。這將通過讀取XML來減少耗盡的內存量,但顯然保持讀取數據(可能在數組中)仍然會累積。如果您沒有使用最新的PHP版本,那麼這可能是優化內存使用的最簡單方法。

除此之外,我建議使用像xhprof或blackfire.io這樣的工具來描述腳本的內存使用情況,並嘗試修復它們指出的主要問題。

+0

感謝dbrumann對此解釋:) – sakados