2009-03-06 140 views
11

在PHP 5.0.4中,如果你不要配置-enable-memory-limit,memory_limit指令被忽略。 (它在推薦的php.ini文件中設置爲8M,但文檔說它被忽略了。)那麼在那種情況下,是否存在每腳本內存限制,還是僅限於系統?PHP內存限制

我問,因爲我升級到PHP 5.2.8,它確實默認允許內存限制。所以現在我必須將價值設定爲適當的值。推薦的php.ini文件現在已將其設置爲128M,但我不知道這是更多更少比默認情況下默認爲5.0.4!

我正在升級生產系統,所以我想避免行爲的任何重大變化。 documentation(搜索「memory_limit」)在這一點上非常混亂。它說「默認」,但我不知道這是否意味着在配置文件中設置的默認值,或者當內存限制被禁用時它使用的默認值。

回答

9

PHP中的內存限制器是可選的;如果您在編譯時禁用它,則完全沒有限制。

在5.0.4中它被禁用,除非你在編譯時明確要求它,原因是內存限制器是useless until 5.2,並沒有計算它應該做的很多事情,包括諸如mysql函數之類的東西。從5.2.1開始,開始在上,現在他們學會了計數。

如果有疑問,請禁用它或確保更新配置文件以使用新的默認設置。將它保留在8MB並升級到5.2.8幾乎肯定會導致問題。

4

128M非常高。你可能需要,但我會感到驚訝。

更重要的是,限制可以被設置爲全局默認在php.ini:

memory_limit = 32M 

您也可以覆蓋它在腳本:

<?php 
ini_set('memory_limit', '128M'); 
... 

你可能會發現你只有少量需要大量內存的腳本。找到一些舒適的價值(通過測試),然後爲需要更多價值的人提高價值。

+1

我的問題是:在5.0.4中,如果你沒有設置memory_limit,它是否仍然強制執行一個? – 2009-03-06 22:13:12

+3

+1,PHP的垃圾收集器已經破壞了不止一次。由於擺脫超時非常流行,所以瞭解你的代碼實際上是什麼對於計算機來說非常重要。 – 2009-03-23 06:07:24

3

5.2之前php中的默認內存限制是8MB,它在php 5.2.0中增加到了默認的16MB。它目前是128MB的默認值。

要重現前5.2版本的行爲,請明確將內存限制設置爲8MB。

查看php.net網站上的「資源限制」。

http://us.php.net/ini.core

編輯

「在此之前PHP 5.2.1,才能使用此指令它必須在編譯時通過在配置行中使用-enable內存限制啓用。「

檢查舊服務器的編譯標誌,如果您沒有啓用它,則不會強制執行任何限制。