技術(shù)頻道導航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運營

贊助商

分類目錄

贊助商

最新文章

搜索

php GD image library 圖片上傳時出現(xiàn)內(nèi)存不足的解決方法

作者:admin    時間:2012-10-21 23:40:25    瀏覽:

圖片上傳時出現(xiàn)內(nèi)存不足的錯誤

有沒有一種可以防止php GD image library運行時出現(xiàn)內(nèi)存不足的方法?當上傳一張大圖片時,GD就有可能用盡內(nèi)存,終止腳本的運行。我比較喜歡其能拋出一段錯誤描述,但并沒有這樣。

現(xiàn)在我在腳本里首先設(shè)置ini_set('memory_limit', '128M'),如果湊效我就這么設(shè)置了。但根據(jù)服務(wù)器設(shè)置這是不可能的,所以我又不得不回到計算法則去估算內(nèi)存的大概使用量,然后與memory_get_usage()做比較(如果這個函數(shù)存在的話),否則只能是粗略估算了。

這樣處理是可以達到目的了,但是處理方式不夠簡潔,并且有時候它也不能成功。我相信會有更好的辦法,例如GD可以返回更好的異常,而不是遇到什么事情只有停止。

◆討論一:

有網(wǎng)友認為操作內(nèi)存不太可能,因為任何動作都會消耗內(nèi)存。其建議最好的辦法是根據(jù)當前內(nèi)存設(shè)置來限制上傳圖片的大小。

但我更喜歡讓GD來判斷內(nèi)存的使用量,不能單單顯示上傳文件大小這樣來處理。因為一張經(jīng)過高壓縮、高分辨率的JPG小圖片,使用內(nèi)存比一張經(jīng)過低壓縮、低分辨率的PNG大圖片還要多。這就是為什么我要重新回到內(nèi)存估算的處理方法上來的原因。

◆討論二:

某網(wǎng)友說可以不去計算內(nèi)存消耗,而是設(shè)定一個最大內(nèi)存使用值,例如你有4G可以內(nèi)存,那么圖片處理可以設(shè)置用2G-4G,一旦超出這個數(shù)值,就停止執(zhí)行腳本,這么避免隱藏的嚴重錯誤。

對于此網(wǎng)友的方法,我認為也是可行的,可是對于共享主機來說,這是無法實現(xiàn)的。我現(xiàn)在只是估算以防止事件掛起。

◆討論三:

捕抓PHP嚴重錯誤,如“Out of memory”或“PHP Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate … bytes) in”。

我認為這個方法不可行。一旦一個PHP腳本出現(xiàn)“Out of memory”,它就不能調(diào)用關(guān)閉函數(shù)因為那需要分配更多的內(nèi)存。

◆總結(jié):問題如何解決?到目前為止我還沒有一個更好的解決方案。我希望能有辦法做到在出現(xiàn)“Out of memory”問題時GD拋出異常,但這好像是一個不可能實現(xiàn)的事件。

小知識:GD 是一個開源的圖像處理庫,支持 PNG/JPEG/GIF以及其他格式的圖像。GD一般被用來創(chuàng)建圖表、圖形、縮略圖以及其他圖像相關(guān)的處理操作。

參考:PHP生成縮略圖出現(xiàn)內(nèi)存不足的解決方法

用php生成縮略圖,操作300kb+的jpg圖片都沒問題,但是操作220kb左右的png圖片就顯示內(nèi)存用盡,
Allowed memory size of 8388608 bytes exhausted (tried to allocate 3715200 bytes;。。。

出現(xiàn)這個問題的解決方法是把分配給php的內(nèi)存設(shè)置大一些,在圖片處理的頁面添加ini_set("memory_limit","12M");

添加之后的內(nèi)存限制僅對本頁面有效,不用擔心對其他程序產(chǎn)生影響。

實例:PHP ini_set 用法

ini_set具有更改php.ini設(shè)置的功能。此函數(shù)接收兩個參數(shù):需要調(diào)整的配置變量名,以及變量的新值。

例如,在某腳本出現(xiàn)時增加最大執(zhí)行時間(maximum execution time):

<?php
ini_set('max_execution_time', 600)
// more code
?>

這樣的設(shè)置將僅僅影響被設(shè)置的腳本。一旦腳本執(zhí)行完畢,該變量將自動恢復到原始值。

標簽: image  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */