compruebe manualmente el jpeg marcador de fin de archivo ffd9 (?) en php para detectar errores de truncamiento

votos
3

básicamente tratando de eliminar archivos jpeg corruptos que terminan prematuramente de una colección. pensé que si el marcador de final de archivo no estaba, significaba que la imagen estaba truncada y, por lo tanto, la consideraría no válida para mis propósitos. es este método de control de sonido? si es así alguna idea de cómo podría implementar esto en php?

aclamaciones

Publicado el 22/09/2009 a las 13:47
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
4

prueba esto:

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

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

Esto cargaría todo el archivo JPG en la memoria y podría generar un error en los archivos grandes.

Alternativa:

$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';
Respondida el 22/09/2009 a las 13:56
fuente por usuario

votos
0

He resuelto este problema con un intento de captura y una @en frente de la función:

    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));
    }
Respondida el 11/11/2013 a las 13:25
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more