basically trying to remove corrupt, prematurely ending jpeg files from a collection. i figured if the end of file marker was absent then that meant the image is truncated and therefore i would consider it invalid for my purposes.
is this method of checking sound? if so any ideas of how i could implement this in php?
cheers
try this:
$jpgdata = file_get_contents('image.jpg');
if (substr($jpgdata,-2)!="\xFF\xD9") {
echo 'Bad file';
}
This would load the entire JPG file into memory and can result into an error for big files.
Alternative:
$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';
I solved this problem with a try catch and a @
in front of the function:
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));
}