2012-09-21 87 views
0

Fatal error: Allowed memory size of 104857600 bytes exhausted (tried to allocate 32345609 bytes)memory_limit不起作用

這意味着我需要137203209字節的內存限制來運行我的PHP腳本。
我得到了這個錯誤,雖然我在腳本中有以下代碼。

ini_set('memory_limit', 268435456); # 256 MB 

該腳本位於我的共享託管服務器上。我無權訪問php.inimemory_limit對於同一個託管服務器中的其他腳本也有效。

當我檢查的phpinfo我的服務器(),我看到這些

suhosin.memory_limit - 128
memory_limit - 100M

我的劇本肯定需要128M以上,因爲它是一個郵件發送腳本與大型文件附件。

+2

'phpinfo();'並檢查你的'ini_set'是否改變了它。有機會(我會說99%)你不允許這樣做。 – zerkms

+0

你確定你需要那麼多的內存嗎?如果你這樣做,也許你不應該共享主機。另外請記住,代碼上的錯誤(如無限循環)也可能會導致該錯誤,從而耗盡所有可用內存。 – bfavaretto

+0

@bfavaretto:實際上沒有無限循環。我已經成功地在我的本地主機上運行腳本。 – Sithu

回答

1

suhosin.memory_limit - 128不允許您將內存限制增加到128mb以上,將其設置爲268435456以允許將memory_limit增加到256Mb。不過,我懷疑你可以在共​​享主機上做到這一點,因爲你需要訪問suhosin ini文件(你不能做像ini_set('suhosin.memory_limit', 268435456);這樣的東西)。

More about suhosin.memory_limit

+0

將限制增加到256M以上是個好主意嗎? – Sithu

+0

@SithuKyaw一個腳本應該使用超過128M,除非你正在做一些超級重的東西(圖像處理等),這是很少見的 –

+0

@Sithu Kyaw,它取決於:)例如,我有一個腳本,它定義了大約30個單詞的所有排列 - 它消耗了大量的內存(接近256Mb),因爲我找回了大約25k行,並且在與「」連接之前,每個單詞與其他單詞分開排列。當然,我可以通過將每個置換計算附加到文件來優化它,但我太懶惰了。如果這個腳本在生產服務器上工作,不會影響其他php進程,所以它們會因爲內存不足而崩潰,所以我可以優化它。雖然我不必這樣做,但我並不打擾自己這麼做。 – Nemoden

1

你是一個共享的主機上,並共享主機幾乎從來沒有讓你使用ini_set('memory_limit',XXX)功能(否則大家都會想辦法抓住整個服務器的內存,並鎖定了整個服務器)。檢查phpinfo()以查看安全模式是否可用...它可能是。

另外,側面說明:如果你想設置的內存限制在任何情況下爲256MB,你可以使用:

的ini_set(「memory_limit的」,「256M」);

符號而不是寫出整個整數。

+0

我看到安全模式關閉在我的服務器。 – Sithu