2012-09-04 62 views
11

熱點解決這個問題,爲什麼會發生?允許的內存大小134217728字節耗盡

Zend服務器日誌:

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 538798977 bytes) in C:\Program Files (x86)\Zend\Apache2\htdocs\test\modules\main.php on line 3

文件main.php不會產生任何錯誤,如果它是從瀏覽器直接執行。但是,如果我使用其他PHO文件的功能,則Zend日誌將打印上述錯誤。

+0

你嘗試增加內存限制? – Jurgo

+2

128MB的使用過的內存?這個腳本*做什麼*? – DaveRandom

+4

你試圖在一次去分配500兆內存?天啊,你是否嘗試一次讀入大量的CSV?如果你這樣做了,一次只讀一行,並以這種方式處理它們。 – Fluffeh

回答

13

我也解決了這個問題。

增加下列變量,使您的網頁執行不會停止:

  • max_input_time
  • memory_limit
  • max_execution_time
+8

...不是技術上*錯誤*所以沒有-1,但可能是一個不好的建議。原來的錯誤表明你(可能)使用了*方式*太多的內存 - 你的代碼中有臭味(無限循環?)。換句話說,如果你的頁面每次運行都消耗多少內存,爲了你的主機的緣故,希望你沒有多少用戶:) – Ben

6

試試這個:

ini_set('memory_limit', '-1'); 

php.net/memory_limit

這將需要服務器的無限的內存使用情況。

+24

這不是你解決這類問題的正確方法 –

+2

但是如果你正在運行CLI模式,它非常有用。 –

+0

@ superarts.org及其他人:有一種方法可以更改PHP的CLI設置。輸入'php --ini'並編輯正確的文件。 –

10

或者增加內存限制在php.ini,或嘗試優化任何大型數據結構(如數組)都不在您的應用程序中。

在任何情況下,如果您的PHP應用程序使用128MB的RAM,可能會出錯。

另外,正如Fluffeh在評論中指出的那樣,您究竟在做什麼來利用500MB的RAM呢?

1

除了user1427811可以監視之前和下載文件後time_limitmemory_limit

function custom_put_contents($source_url='',$local_path=''){ 

    $time_limit = ini_get('max_execution_time'); 
    $memory_limit = ini_get('memory_limit'); 

    set_time_limit(0); 
    ini_set('memory_limit', '-1');  

    $remote_contents=file_get_contents($source_url); 
    $response=file_put_contents($local_path, $remote_contents); 

    set_time_limit($time_limit); 
    ini_set('memory_limit', $memory_limit); 

    return $response; 
} 
相關問題