в основном пытается удалить коррумпированные, преждевременно заканчивающиеся 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)); }