我有一個使用SimpleImage.php (一個簡單的圖片上傳腳本PHP測試http://www.white-hat-web-design.co.uk/blog/resizing-images -with-php /) 調整並保存上載圖像的2個副本。腐敗(但顯然精細)圖像
沒有驗證的巨量,只是檢查它是否存在,以及文件擴展名是好的,也是一個exif_imagetype();
通話。
這一點,直到我試圖上傳一個看似普通的JPEG這竟然是無形(和untestably?)腐敗已經沒有任何問題至今工作。這件事有些不對,但我對圖片腐敗知之甚少 - 它看起來很好,並且對任何東西都沒有問題,但是當我試圖在腳本中保存縮放副本時,我收到了一個白頁。
的問題無疑是一個具體的形象,我exhastively與其他圖像都來自我的本地股票和現貨圖像的網站進行測試,並且只有一個圖像弄壞。
我調整使用的Photoshop副本(預測文件大小啄給了我一些奇怪的號碼 - 45meg頂級品質的JPEG),並沒有問題上傳。
所以我的問題是,我該如何測試?
有問題的圖像是在這裏:http://chinawin.co.uk/broken.jpg //當心,700K
筆記:我已經有類似的分辨率,圖像的大小和名稱進行測試,一切從這個圖像的工作分開。
更新: 通過試驗和錯誤我已經縮小了腳本分裂的地方,我將圖像加載到SimpleImage的var中。奇怪的是,這是第二行(第一行是創建大副本,這是創建縮略圖的行)。 評論出來意味着其餘的工作正常...也許一些重構將避免這個問題。
月2日更新: 下面是一個代碼片段,並從失敗行一些背景:
//check if our image is OK
if ($image && $imageThumb)
{
//check if image is a jpeg
if (exif_imagetype($_FILES[$k]['tmp_name']) == IMAGETYPE_JPEG)
{
list($width, $height, $type, $attr) = getimagesize($_FILES[$k]['tmp_name']);
//echo 1;
$image = new SimpleImage();
//echo 2;
$image->load($_FILES[$k]['tmp_name']);
//echo 3;
$imageThumb = new SimpleImage();
//echo 4;
//this next line topples my script, but only for that one image - why?:
$imageThumb->load($_FILES[$k]['tmp_name']);
//echo '5<br/><br/>-------<br/>';
//do stuff, save & update db, etc
}
}
最後編輯: 原來我的腳本運行內存,並有很好的理由 - 4900x3900圖像240ppi的數據加載到內存中後是兩倍 - 所以我使用的可能是> 90meg的內存,/圖像。
蓋帽@Pekka發現這一點。
將腳本重構爲僅加載一次圖像,然後使用此變量代替它的兄弟,修復了我的腳本。仍然存在(不同的)問題與上傳更大(2.5meg)的圖像,但這是另一個問題。
致命錯誤:134217728字節允許的內存大小用盡(試圖分配19600字節)在/my_path/SimpleImage.php在第28行 – jammypeach
謝謝你,找到了根本原因:) – jammypeach