2010-08-24 68 views
2

在嘗試使用libGD在PHP中調整圖像大小之前,我想檢查是否有足夠的內存可用於執行此操作,因爲「內存不足」會徹底殺死PHP進程,並且可以不會被捉住。爲libGD操作估計所需內存

我的想法是,我需要的內存4字節,在原有的每個像素(RGBA)和新形象:

// check available memory 
if(!is_mem_available(($from_w * $from_h * 4) + ($to_w * $to_h * 4))){ 
    return false; 
} 

試驗表明,這比庫更多的內存似乎真的使用。任何人都可以提出更好的方法?

+0

你的意思是它使用遠遠多於寬x高x 4或更少? – 2010-08-24 07:44:00

+0

很高興見到你在這裏! – 2010-08-24 08:05:21

+0

澄清:libGD使用的內存少於我近似計算的內存,導致調整大小被拒絕,而這可能是沒有問題的。 – 2010-08-24 09:03:25

回答

1

我想這必須可以找出通過分析imagecopyresampled的源代碼GD的峯值內存使用量,但這可能是困難的,需要擴展分析,從版本而有所不同,並且通常不可靠。

根據您的情況,採用不同的方法來記:當調整圖像大小,調用同一個服務器上的另一個PHP腳本,但使用http:

$file = urlencode("/path/to/file"); 
$result = file_get_contents("http://example.com/dir/canary.php?file=$file&width=1000&height=2000"); 

(消毒的file參數,很明顯)

如果該腳本失敗並出現「內存不足」錯誤,則會知道圖像太大。

如果成功調整圖像大小,它可能會返回包含調整大小結果的臨時文件的路徑。事情會從那裏正常進行。