php limit最大 - 在php中允許內存大小33554432字節用盡(試圖分配43148176字節)




9 Answers

最後我找到了答案:

只需將此行添加到您的文件中出現錯誤的行之前

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

它會佔用無限的服務器內存,它工作正常。

感謝您給建議朋友。

memory wordpress

這個錯誤信息正在呈現,有什麼建議?

在php中允許內存大小33554432字節用盡(試圖分配43148176字節)




你的腳本使用的內存太多了。 如果你的循環已經失控,並且你正在創建對像或者在循環的每次傳遞中添加數組,那麼這經常會發生在PHP中。

檢查無限循環。

如果這不是問題,試著通過將通過設置為空的對象銷毀來幫助PHP。 例如。 $OldVar = null;

檢查錯誤實際發生的代碼。 你會期望這一行將分配大量的內存? 如果沒有,請嘗試找出問題所在......




不幸的是,在PHP中編程的速度比您意識到的要快得多。 複製字符串,數組和對象而不是使用引用將會這樣做,儘管PHP 5應該比PHP 4更自動地完成此操作。但是,與處理最小的邏輯單元相比,通過多個步驟處理整個數據集也是浪費的一次。 典型的例子是使用來自數據庫的大型結果集:大多數程序員將整個結果集讀入一個數組,然後用foreach()循環一次或多次。 使用while()循環一次獲取並處理一行的內存效率要高得多。 同樣的事情適用於處理文件。




您可以通過執行腳本中所有代碼上面的以下行來增加允許執行php腳本的內存:

ini_set('memory_limit','-1'); // enabled the full memory available.

還要在腳本中分配不需要的變量。

檢查這個php庫: 用PHP釋放內存




我們有類似的情況,我們嘗試了ini_set('memory_limit','-1')的答案。 並且一切正常,壓縮的圖像文件大於1MB到KB。




如果您正在嘗試讀取文件,這將佔用PHP中的內存。 例如,如果你想打開並讀取一個MP3文件(比如說,$ data = file(“ http://mydomain.com/path/sample.mp3 ”),它將把它全部放入內存中。

正如尼爾森所說,如果你真的需要使用這麼多的內存,你可以努力增加你的最大內存限制。




我沒有更新我的主機,數據庫是只讀的。 Joomla需要編寫會話,但無法完成。




我有同樣的問題,在命令行中運行PHP。 最近,我更改了php.ini文件,並在更改php.ini時發生了錯誤

這是為php7.0

路徑到php.ini,我犯了錯誤: /etc/php/7.0/cli/php.ini

我已經設置memory_limit = 256 (這意味著256 bytes
而不是memory_limit = 256M (這意味著256 Mega bytes )。

; 腳本可能消耗的最大內存量(128MB)
; http://php.net/memory-limit
memory_limit = 128M

一旦我糾正它,我的過程開始運行良好。




我注意到許多答案只是嘗試增加給腳本的內存量,這個腳本有它的地位,但是更多的時候,這意味著由於數量或體積不可預測,內存過於寬鬆。 很顯然,如果你不是一個腳本的作者,那麼你將受到作者的支配,除非你覺得雄心勃勃:) PHP文檔甚至說內存問題是由於“ 寫得不好的腳本

應該提到ini_set('memory_limit', '-1'); (無限制)可能導致服務器不穩定,因為0 bytes free = bad things 。 相反,通過您的腳本嘗試執行的操作以及機器上的可用內存量來找到合理的平衡。

更好的方法:如果您是該腳本的作者(或雄心勃勃),則可以使用xdebug調試此類內存問題。 最新版本(2.6.0 - 發布2018-01-29)帶回了內存分析,顯示哪些函數調用消耗大量內存。 它暴露了腳本中難以找到的問題。 通常情況下,效率低下的環路並不期待它所接收到的音量,但每種情況都會留給讀者作為練習:)

xdebug文檔很有幫助,但它歸結為3個步驟:

  1. 安裝它 - 通過apt-getyum等可用
  2. 配置它 - xdebug.ini: xdebug.profiler_enable = 1xdebug.profiler_output_dir = /where/ever/
  3. QCacheGrindKCacheGrind等工具中查看配置文件



Related

php memory-management memory-limit