在php中手动检查文件标记ffd9(?)的jpeg结尾以捕获截断错误

时间:2009-09-22 12:47:45

标签: php jpeg corrupt

基本上试图从集合中删除损坏的,过早结束的jpeg文件。我想如果文件标记的末尾不存在那么这意味着图像被截断,因此我认为它对我的目的无效。 这种检查声音的方法是什么?如果有的话我怎么能在php中实现这个?

欢呼声

2 个答案:

答案 0 :(得分:4)

试试这个:

$jpgdata = file_get_contents('image.jpg');

if (substr($jpgdata,-2)!="\xFF\xD9") {
  echo 'Bad file';
}

这会将整个JPG文件加载到内存中,并导致大文件出错。

替代:

$jpgdata = fopen('image.jpg', 'r'); // 'r' is for reading
fseek($jpgdata, -2, SEEK_END); // move to EOF -2
$eofdata = fread($jpgdata, 2);
fclose($jpgdata);

if ($eofdata!="\xFF\xD9") echo 'Bad file';

答案 1 :(得分:0)

我通过try catch和函数前面的@解决了这个问题:

    try
    {
        if (!@imagecreatefromjpeg($photoPath)
            throw new Exception('The image is corrupted!');
    }
    catch(Exception $e)
    {
        $error = $e->getMessage();
        Yii::app()->user->setFlash('addphoto', Yii::t('app', $error));
    }