2011-07-04 19 views
0

我使用來自https://github.com/rodneyrehm/CFPropertyList的CFPropertyList處理我使用PHP添加的內容。使用CFPropertyList處理大.plist文件

這一切工作正常,但現在所有內容都添加了我的文件有大約700KB這不是很大,但似乎足以讓Apache崩潰嘗試保存文件。

孩子PID 1278退出信號分割故障

我CacheGrind看到,在我的應用程序有很多的時間採取調用CFPropertyList->導入()和CFDictionary-> toxml用於()等等那裏可能是瓶頸?

我是否同時做出許多改變?我是否應該更加加載()和保存()以避免一次保存太多更改?

任何線索?

回答

0

當你實現未知大小的文檔中的searchNode()函數,你應該總是使用「深度」參數,以避免下臺的問題該文檔並在遞歸循環中調用您的函數巨大時間。

因爲這會造成無限循環,這也會在PHP中導致段錯誤,但不會以致命錯誤或警告結束。

1

我不認爲這是造成問題的大小,而是PHP中的一個錯誤。只有在PHP本身存在嚴重錯誤的情況下才會出現Segfault錯誤。

接下來的步驟:

  • 首先,升級到最新的PHP版本(5.3.6)
  • 如果不能再發生了,心情舒暢
  • 它仍然發生:
    • 使用不超過20行的PHP腳本重現此問題。
    • 報告bugs.php.net
+0

我不能在本地升級PHP,因爲重新編譯MAMP並非易事。但是,我在服務器上使用不同版本時也遇到了同樣的問題。那麼我會嘗試一個虛擬機。 – spankmaster79

+0

它也可能是導致seg故障的無限循環嗎? – spankmaster79