2010-11-11 64 views
1

當我嘗試裁剪圖像時,我剛收到此錯誤,我剛剛上傳。我剛剛上傳的圖像大約3MB。PHP:內存不足錯誤,該怎麼辦?

這裏的錯誤

<br /> 
<b>Fatal error</b>: Out of memory (allocated 45088768) (tried to allocate 15552 bytes) <br /> 

而且其時我嘗試使用此功能發生:imagecreatefromjpeg($ SRC);

我有在頂部:

ini_set('memory_limit', '256M'); 

所以怎麼能說是內存不足了,我應該怎麼解決這個問題?我的圖片上傳標準限制爲6MB。 (雖然它可以很好地上傳到服務器,但是當我使用裁剪時,出現imagecreatefromjpeg()函數和「內存不足」錯誤)

+0

如果你做'ini_set('memory_limit',-1);'會發生什麼?這應該禁用限制。另外,你使用的是什麼版本的PHP和什麼操作系統? – lonesomeday 2010-11-11 20:35:27

+0

即時通訊仍然有錯誤-1 – Johnson 2010-11-11 20:50:40

+0

任何機會你做循環? – ajreal 2010-11-11 20:55:36

回答

1

PHP通常允許您在更改memory_limit期間運行。雖然有一些擴展,如Suhosin,將禁用此行爲。檢查您的PHP設置是否使用phpinfo()加載Suhosin擴展。如果是這樣,請檢查* suhosin.memory_limit *設置是否設置爲0.如果是這樣,那將解釋此行爲(不更新memory_limit),並且您必須聯繫sysadmin才能獲得該限制。

另見http://www.hardened-php.net/suhosin/configuration.html#suhosin.memory_limit

+0

鑑於上述評論的答案,這很可能是問題所在。 +1 – lonesomeday 2010-11-11 20:54:12

+0

我沒有任何擴展 – Johnson 2010-11-11 21:11:13

+0

@Johnson你可能不知道你是 - 例如,Ubuntu默認啓用它。你檢查過phpinfo()嗎? – lonesomeday 2010-11-11 21:14:28

2

在做image processing with GD,總是imagedestroy後來釋放使用的內存,並儘可能早地做到這一點。所以,只要你不再需要圖像資源,立即用imagedestroy銷燬它。

+0

好的很好的功能,但我沒有任何東西從裁剪之前的裁剪()有其他功能釋放內存的東西,例如可能pathinfo();或exif_imagetype(); – Johnson 2010-11-11 21:30:14

0

A 安全解決方案是應用一些過濾器,防止圖像處理(或至少發出一些警告),當進程將需要更多的內存比允許的限制。在imgcreatefromjpeg上的PHP手冊有一些用戶功能(檢查評論),它們能夠計算處理圖像所需的內存。根據計算,您可以限制上傳圖像的最大尺寸,以防止用戶觸發內存限制錯誤。

note:不要忘記在計算上增加幾MB。

但是,如果您堅持不限制圖片大小,請嘗試請求您的主持人增加您的內存限制或使用第三方服務,如Google Images Python Api