2011-10-03 40 views
0

我有一個使用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)的圖像,但這是另一個問題。

回答

2

這是最有可能是內存問題:你的JPG非常大(超過4000 X 4000像素),且無壓縮,確實會吃了約48兆字節的RAM。

激活錯誤報告以確保。如果是這個原因,參見例如這裏在做什麼:Uploading images with PHP and hitting the script memory limit

+0

致命錯誤:134217728字節允許的內存大小用盡(試圖分配19600字節)在/my_path/SimpleImage.php在第28行 – jammypeach

+0

謝謝你,找到了根本原因:) – jammypeach