проверьте вручную для jpeg конца маркера файла ffd9 (?) в php, чтобы поймать ошибки усечения

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

ура

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

$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'; 

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