2010-10-21 15 views
6

Tengo un sitio web donde el público puede subir archivos JPEG.¿Cómo manejar este error causado al cargar un JPEG problemático?

Alguien del público estaba cargando un archivo JPEG no válido que causaba que el sitio fallara para ellos.

PHP dijo ...

imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg, libjpeg: recoverable error: Premature end of JPEG file

yo no estaba segura de cómo evitar esto, por lo que Google y encontró this site. Se dijo que añada ...

ini_set('gd.jpeg_ignore_warning', 1); 

añadí que en mi index.php (el sistema de arranque de mi sitio web, donde hago otra ini_set()).

Esto no parece solucionarlo.

¿Cómo puedo manejar esta caja de archivos JPEG no válidos? ¿Estoy haciendo algo mal con el set de INI? Estoy en un host compartido, así que no puedo cambiar php.ini directamente.

Estoy usando Kohana 2.3, y es Image library, pero no creo que sea realmente relevante aquí.

Gracias

Respuesta

9

Intente meter un carácter @ antes de la orden:

$image = @imagecreatefromjpeg("file.jpg"); 
if(!$image) die("Sorry, bad JPEG"); 

Es sucio y probablemente obsoleta (por no mencionar lento), pero es probable que el código no falla.

Espero que esto ayude!

+0

¡Ah, se me olvidó el operador del supresor de errores! Gracias, sé que no es recomendable y feo como el infierno, pero * puede * ser mi única esperanza. – alex

+0

Sí. Una corrección rápida y sucia a menudo es lo suficientemente buena. –

+1

El '@' solo es feo si las fallas se desactivan por completo y pueden propagarse. Como está buscando condiciones de error en la siguiente línea, este es un uso aceptable de '@'. – deceze

5

que se suele trabajar con imagecreatefromjpeg así:

$img = @imagecreatefromjpeg($file); 
if (!$img) { 
    // handle error yourself 
} 

Nota del @ frente a imagecreatefromjpeg, que se utiliza para eliminar los errores. Desafortunadamente no puedo decirte cómo Kohana hace esto internamente y si se puede persuadir a hacer lo mismo.

+0

Hace lo mismo, solo usa una función variable porque admite varios controladores. – alex

Cuestiones relacionadas