1. 程式人生 > >php 上傳圖片造成記憶體溢位 Allowed memory size of ... bytes

php 上傳圖片造成記憶體溢位 Allowed memory size of ... bytes

[場景]

    圖片上傳,是網站開發常見的需求——使用者上傳圖片=>後端處理圖片(壓縮、生成縮圖、裁剪、加水印等等...)=>儲存在特定的資料夾中,在這個過程中,有時候上傳大圖片會出現錯誤“Allowed memory size of xxx bytes”,就是記憶體溢位的意思。

[原因]

    google了一下,主要的答案都是——可用記憶體太少了,通過修改php.ini的相關引數來減少記憶體的限制。https://stackoverflow.com/allowed-memory-size-of,雖然這是一種解決方案,但是預設的設定少說都有64M,再大的圖片也不會這麼大吧。所以,找到了另外的一個觀點(

傳送門

    ——php處理圖片時(如使用php的gd庫的函式,例如imagecreatetruecolor(),),佔用記憶體的大小不是取決於圖片的體積大小,而是解析度。具體公式是:(圖片解析度,圖片物件的width和height )X(圖片的通道數,一般是3)X 1.7。e.g. 一張照片大小隻有3.1M,但是解析度高達3994X2443,佔用記憶體是 3994*2443*3*1.7 = 49762444.2!

[總結]

    這篇文章主要是對記憶體溢位的錯誤進行探討,大家平時進行呼叫第三方類庫圖片處理時,指定解析度可避免不必要的錯誤,如果大家都什麼另外的見解或者補充歡迎在下面留言討論~