вручную проверять наличие jpeg маркера конца файла ffd9 (?) в php для обнаружения ошибок усечения - PullRequest
3 голосов
/ 22 сентября 2009

в основном пытается удалить поврежденные, преждевременно заканчивающиеся файлы JPEG из коллекции. я решил, что если маркер конца файла отсутствует, это означает, что изображение обрезано, и поэтому я считаю его недействительным для моих целей это метод проверки звука? если да, то какие-либо идеи о том, как я мог бы реализовать это в php?

ура

Ответы [ 2 ]

4 голосов
/ 22 сентября 2009

попробуйте это:

$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';
0 голосов
/ 11 ноября 2013

Я решил эту проблему с помощью catch 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));
    }
...