我有一個虛擬主機,它給出了80M的最大memory_limit(即ini_set(「memory_limit」,「80M」);)。 我正在使用使用函數imagecreatefromjpeg()的照片上傳; 當我上傳大圖像,它給出了錯誤 「致命錯誤:允許的內存大小83886080字節用盡」 圖像我可以限制用戶的最大大小(以字節爲單位)? 或memory_limit取決於其他一些因素?memory_limit = 80M。 imagecreateformjpeg()的最大圖像大小是多少?
回答
8388608
的內存大小是8兆字節,而不是80.您可能想要檢查是否仍可以在某處增加該值。
除此之外,對於圖像處理的一般規則是,它至少需要
image width x image height x 3
字節的存儲器以加載或創建的圖像。 (一個字節爲紅色,一個字節爲綠色,一個字節爲藍色,可能還有一個字母用於Alpha透明度)
按照該規則,640 x 480像素的圖像需要至少9.2兆字節的空間 - 不包括開銷和腳本本身佔用的空間。
由於JPG是一種壓縮格式,壓縮比率可變,因此無法確定JPG文件大小的字節數的限制。您將需要通過圖像分辨率並設置一個限制。
如果你沒有那麼多的可用內存,你可能想要研究更有效的方法來做你想做的事情,例如,平鋪(一次處理圖像的一部分),或者如果你的提供者允許的話,使用外部工具如ImageMagick(它也消耗內存,但超出PHP腳本的內存限制)。
嗨Pekka,謝謝你的回答,對不起,我錯誤地寫爲8388608它實際上是83886080字節。而當我試圖上傳3200X2400與3.5MB,它給錯誤。什麼最大寬度或高度或大小,我可以限制上傳,以防止錯誤?在此先感謝:-) – 2010-08-03 04:08:08
@阿倫很難分辨! 3200x2400的圖像應該適合80 MB內容 - 可能是腳本沒有被有效地寫入,並且將整個圖像存儲在多個變量中。 – 2010-08-03 08:27:51
也許你的腳本比圖片本身使用更多的內存。試着調試你的內存消耗。
一個快速和骯髒的方法是使用memory_get_usage和memory_get_usagememory_get_peak_usage在你的代碼,尤其是在自定義error_handler和shutdown_function某些點。這可以讓你知道什麼確切的操作會導致內存耗盡。
- 1. 站點背景圖像的最大文件大小應該是多少?
- 2. 在圖像按鈕中使用的圖像大小是多少?
- 3. char []的大小是多少?
- 4. RLMInt的大小是多少?
- 5. 減少uclinux圖像大小
- 6. 從REST API返回的文檔的最大大小是多少?
- 7. Workspacecheckinparameters TFS中的註釋屬性的最大大小是多少?
- 8. 通過rails的mysql查詢的最大大小是多少?
- 9. CVS可以處理的文件的最大大小是多少?
- 10. JAX-WS的SOAP響應的最大大小限制是多少?
- 11. iphone os支持的最大堆大小和堆棧大小是多少?
- 12. Mysql中int(10)的最大大小是多少
- 13. 會話變量可容納的最大大小是多少?
- 14. WCF綁定中的最大緩衝區大小是多少?
- 15. Titanium中的最大數據庫大小是多少?
- 16. PHP中單個POST變量的最大大小是多少?
- 17. 允許的最大響應數據大小是多少?
- 18. Xively數據點值的最大大小是多少
- 19. 黑莓App World的最大應用文件大小是多少
- 20. 在Solr中,「文本」字段的最大大小是多少?
- 21. ajax響應數據的最大大小是多少?
- 22. PHP 5中的最大文件上傳大小是多少?
- 23. webRTC數據通道消息的最大大小是多少?
- 24. Fortran 90中雙精度最大的數組大小是多少?
- 25. xmlhttprequest 2級的最大文件上傳大小是多少?
- 26. 系統允許的最大文件大小是多少?
- 27. std :: ostringstream緩衝區的最大大小是多少?
- 28. (T)可以產生的最大值大小是多少?
- 29. 每種情況下的最大文件大小是多少?
- 30. URL中url字的最大大小是多少?
看起來像你的主機限制內存8M,而不是80 – 2010-08-01 12:58:46
你想要做什麼與你'createfromjpeg()'圖像?可能有一個高效的內存解決方案。 – MvanGeest 2010-08-01 12:59:59