2010-09-20 112 views
0

我的一個腳本需要大內存。而可能是因爲這個我收到以下錯誤php memory_limit問題

Fatal error: Out of memory (allocated 42729472) (tried to allocate 32 bytes)

我試圖用的ini_set(「memory_limit的」,「256M」)來改變memory_limit的;在我的頁面頂部,但我仍然得到相同的問題。我也試過ini_set('memory_limit','512M');但沒有運氣。

+1

什麼操作導致此錯誤?你需要調試你的代碼來隔離造成這種情況的原因。另外,你在哪裏調用'ini_set('memory_limit','512M');',本地機器?託管網站? – 2010-09-20 07:42:10

回答

2

這在大約42M後崩潰,這表明PHP解釋器沒有得到備忘錄。在帶有phpinfo()輸出的測試頁中嘗試相同的ini_set()並查找內存限制。

您能否將它設置在php.ini文件中?

+0

是從php.ini設置它的工作?什麼可能是它沒有從ini_set() – Prakash 2010-09-20 08:20:21

+0

http://php.net/manual/en/ini.core.php工作的問題 – teemitzitrone 2010-09-20 09:24:24

4

你有權訪問php.ini文件嗎?然後在那裏更改memory_limit值。

你還應該分析你的腳本。很多數據庫事務?他們中的很多人在循環?很多循環?很多臨時變量?巧妙使用unset可以產生巨大的差異。

也很高興知道:Performance ConsiderationsGarbage Collection

編輯(可能的回答你的問題,爲什麼memory_limitini_set工作)

memory_limit integer 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.

來源:php.net

0

我以前有similar issue。在我的情況下,這是suhosin補丁,阻止我的腳本獲得更多的內存。