2017-03-07 136 views
0

我正在研究一個腳本,它必須在一大組圖像上工作,我需要一種優雅的方式來處理該組中的損壞/截斷圖像。使用PHP處理損壞/截斷的文件gd-png

目前我的腳本適用於所有有效的圖像,但在運行到截斷文件時會崩潰。它必須潛入文件夾中,但我想處理這種情況。

它是一個* .png.tmp文件,當它提供給imagecreatefrompng()時,它會導致致命錯誤並停止我的腳本。

Fatal error: imagecreatefrompng(): gd-png: fatal libpng error: Read Error: truncated data... 

它是由兩個和getimagesize()exif_imagetype()識別爲PNG。

由於我無法將其作爲例外處理,有沒有辦法檢查文件是否有效,而不會崩潰我的腳本,也不依賴文件名中的擴展名?

我可以生活在跳過圖像,但我不知道如何在擊中致命錯誤之前將其識別爲問題圖像。

+0

爲什麼不使用try/catch? – Pitchinnate

+0

@Pitchinnate無法生存的致命錯誤=( – CptAJ

+0

如何做到這一點是字面上唯一的[imagecreatefrompng'手冊頁上的例子](http://php.net/manual/en/function.imagecreatefrompng.php#示例-3529)... – timclutton

回答

1

您是否嘗試通過使用@操作符來抑制錯誤,並檢查圖像是否實際創建?

foreach ($imagePaths as $imagePath) 
{ 
    $image = @imagecreatefrompng($imagePath); 
    if (!$image) 
    { 
     //maybe delete bad image? 
     unlink($imagePath); 
     continue;//do nothing in this iteration anymore 
    } 
    //do your magic here 
}