2014-04-14 61 views
1

我在我的個人電腦上使用本地主機上的WAMP服務器(32位)。我有一個大的(非常大的)多維數組,它通過讀取包含長句子的CSV文件(CSV文件包含20,000行信息​​)來獲取其信息。問題是,我得到以下錯誤,當它通過一些計算:致命錯誤:內存不足(分配1134559232)(試圖分配32768字節)在X: wamp www xxx

Fatal error: Out of memory (allocated 1134559232) (tried to allocate 32768 bytes) in x:\wamp\www\xxx

我嘗試了不同的解決方案,如增加upload_max_filesizepost_max_sizemax_file_uploadsmemory_limit或將其設置在php.ini爲-1或開頭我的腳本也沒有人工作。請幫助我,並且請不要讓我重新設計我的代碼或更改WAMP的版本,由於某些原因它是不可能的。非常感謝你。 :)

+0

您是否在php.ini中更改了限制後重新啓動了apache? – robjingram

+0

假設你改變了php.ini中的'memory_limit'設置並重新啓動了apache服務,你是否確定更新了正確的php.ini文件? (有兩個,一個用於HTTP服務,另一個用於命令行界面。) – faintsignal

+0

我檢查了phpinfo(),它顯示memory_limit被設置爲-1,所以看起來我已經更新了正確的一個。我重新啓動apache,仍然沒有變化:( – Arash

回答

2

最後我可以找到解決方案。我發現當PHP收集垃圾越來越滿時,沒有辦法將它釋放。 Unsetgc_collect_cycles()也無效。唯一的辦法是在代碼的不同部分使用Function。就我而言,我在for循環中有一個大腳本,因此我將所有代碼複製到一個函數中,並在我的循環中調用該函數。每次功能靜音,內存都可以免費使用。您可以通過在您的功能中添加memory_get_usage()一次,然後一次刪除功能以查看其差異來測試它。

+0

你能幫我解決我的問題嗎? 35 35 012 012 012 012 012 012 012 –

0

把這一行在你的代碼的開頭:

ini_set("memory_limit", -1); 

PHP手冊給出了memory_limit瞭如下描述:

This sets the maximum amount of memory in bytes that a script is allowed to allocate. This helps prevent poorly written scripts for eating up all available memory on a server. Note that to have no memory limit, set this directive to -1.

Prior to PHP 5.2.1, in order to use this directive it had to be enabled at compile time by using --enable-memory-limit in the configure line. This compile-time flag was also required to define the functions memory_get_usage() and memory_get_peak_usage() prior to 5.2.1.

When an integer is used, the value is measured in bytes. Shorthand notation, as described in this FAQ , may also be used.

我不知道是什麼讓他們如此自信只有寫得不好的腳本需要調整這個設置,但我希望這個簡短的介紹能滿足你的需要。

+1

謝謝。增加memory_limit或將其設置爲-1沒有幫助解決問題, – Arash

1

這些都不是這些設置,它是memory_limit,這是PHP腳本可以消耗的最大內存量。但是,在任意增加此設置之前,請確保您的服務器有足夠的資源。

+0

謝謝。增加memory_limit或將其設置爲-1並沒有幫助解決問題, – Arash

+0

您是否看到_exactly_相同的錯誤與相同的數字?如果是這樣,那麼有什麼問題創建一個包含'phpinfo();'的腳本並查看它對'memory_limit'和你的php.ini文件的位置的描述,並重新啓動Apache以獲取更改 – robjingram

+0

我檢查了'phpinfo()'和它顯示'memory_limit'設置爲-1,而且Im在錯誤中看不到完全相同的數字我重新啓動apache,仍然沒有變化:( – Arash

相關問題