2010-08-01 43 views
2

我有一個虛擬主機,它給出了80M的最大memory_limit(即ini_set(「memory_limit」,「80M」);)。 我正在使用使用函數imagecreatefromjpeg()的照片上傳; 當我上傳大圖像,它給出了錯誤 「致命錯誤:允許的內存大小83886080字節用盡」 圖像我可以限制用戶的最大大小(以字節爲單位)? 或memory_limit取決於其他一些因素?memory_limit = 80M。 imagecreateformjpeg()的最大圖像大小是多少?

+1

看起來像你的主機限制內存8M,而不是80 – 2010-08-01 12:58:46

+0

你想要做什麼與你'createfromjpeg()'圖像?可能有一個高效的內存解決方案。 – MvanGeest 2010-08-01 12:59:59

回答

2

8388608的內存大小是8兆字節,而不是80.您可能想要檢查是否仍可以在某處增加該值。

除此之外,對於圖像處理的一般規則是,它至少需要

image width x image height x 3 

字節的存儲器以加載或創建的圖像。 (一個字節爲紅色,一個字節爲綠色,一個字節爲藍色,可能還有一個字母用於Alpha透明度)

按照該規則,640 x 480像素的圖像需要至少9.2兆字節的空間 - 不包括開銷和腳本本身佔用的空間。

由於JPG是一種壓縮格式,壓縮比率可變,因此無法確定JPG文件大小的字節數的限制。您將需要通過圖像分辨率並設置一個限制。

如果你沒有那麼多的可用內存,你可能想要研究更有效的方法來做你想做的事情,例如,平鋪(一次處理圖像的一部分),或者如果你的提供者允許的話,使用外部工具如ImageMagick(它也消耗內存,但超出PHP腳本的內存限制)。

+0

嗨Pekka,謝謝你的回答,對不起,我錯誤地寫爲8388608它實際上是83886080字節。而當我試圖上傳3200X2400與3.5MB,它給錯誤。什麼最大寬度或高度或大小,我可以限制上傳,以防止錯誤?在此先感謝:-) – 2010-08-03 04:08:08

+0

@阿倫很難分辨! 3200x2400的圖像應該適合80 MB內容 - 可能是腳本沒有被有效地寫入,並且將整個圖像存儲在多個變量中。 – 2010-08-03 08:27:51

0

也許你的腳本比圖片本身使用更多的內存。試着調試你的內存消耗。

一個快速和骯髒的方法是使用memory_get_usage和memory_get_usagememory_get_peak_usage在你的代碼,尤其是在自定義error_handlershutdown_function某些點。這可以讓你知道什麼確切的操作會導致內存耗盡。

相關問題