我已經做了一些搜索,我明白,它是不可能從耗盡的內存致命錯誤中恢復。我有一個運行imagecreatefromjpeg的腳本。我嘗試捕獲異常,我試着用@運行函數,然後檢查返回值爲null或false,我試着用'die()'來運行它。什麼都沒有所以我無法從中恢復。可能檢查imagecreatefromjpeg是否會在運行之前導致內存耗盡的致命錯誤?
那麼有可能在我接觸之前預測它嗎?是否有可能檢查一個JPEG的未壓縮的大小,然後優雅地死亡?我想按照「圖片$圖片太大而無法處理」的方式向我的用戶發送消息,您需要手動創建縮略圖。
我的共享主機不允許我將內存大小增加到64mb以上,所以這不是一個選項。我的代碼如下...
function createthumb($section,$filename,$constrain=100)
{
$dir = "$section/thumbs_$constrain";
if(file_exists($workingdir."$section/thumbs_$constrain/$filename")) return 1;
if(!file_exists($dir)) mkdir($dir);
$src = imagecreatefromjpeg($workingdir."$section/$filename");
...
謝謝。我現在就做這個。我會研究imagemagic的長期解決方案。 32 * 1024 * 1024的數字是否接近觸發內存超限64MB的限制? – MrVimes 2011-05-25 17:30:08
我已經完成了一些測試,它似乎*使用的公式是這樣的:以ini_get('memory_limit')'*的值以字節爲單位*並乘以0.19。然後將其與上傳圖像中的像素總數(寬度x高度)進行比較。如果上傳的圖像中的像素總數大於第一個數字,則拒絕它。我已經在兩臺服務器上使用0.19和0.20作爲乘數並且0.19作用。 – Nick 2012-04-07 00:02:19
是的,每個像素使用4個字節,0.20意味着GD的可用內存大約80%,這看起來很正常!儘管這不是一門精確的科學。 – Benjamin 2012-04-08 14:09:12