2010-10-10 26 views
6

He recibido esta advertencia cuando algunas personas cargan imágenes en nuestro sitio:el temido "Advertencia: imagecreatefromjpeg(): '/ tmp/filename' no es un archivo JPEG válido en /phpfile.php en línea xxx"

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /home/pathremoved/includes/snapsutils.php on line 220

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: '/tmp/phpiw4MFk' is not a valid JPEG file in /home/pathremoved.php on line 220

Warning: imagesx(): supplied argument is not a valid Image resource in /home/pathremoved.php on line 222

Warning: imagesy(): supplied argument is not a valid Image resource in /home/pathremoved.php on line 223

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /home/pathremoved.php on line 240

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /home/pathremoved.php on line 242

Esto sólo ocurre con ciertas imágenes, que al abrirse en cualquier programa están bien, incluso subidos a la versión del sitio que tengo en el servidor local sin problemas ... Busqué en google un poco, pero no encontré nada concluyente. ..

note php upload_max el tamaño es 5M y post_max_size es 5M. Esto no es un problema de carga o memoria. He probado con imágenes 4M sin problemas.

cualquier ayuda apreciada.

+1

Esa es una imagen grande !!! Podría ser la causa? –

+0

no, he subido imágenes de hasta 5mb sin problemas. –

+0

Lo único que destaca un poco en la imagen es que es un JPEG progresivo, pero GD no debería tener problemas con eso. No es una imagen CMYK o nada. ¿Funciona después de volver a guardar? –

Respuesta

16

Después de investigar un poco en Google encontré this bug report. Parece que la biblioteca GD es menos tolerante con los archivos JPEG con errores que otros programas. La solución propuesta era establecer GD ignorar JPEG error de antes de procesar la imagen, así:

ini_set("gd.jpeg_ignore_warning", 1); 

Esperemos que funcione para usted. Otro problema potencial con el que se puede encontrar es con la memoria. Parece que GD mantiene todas las imágenes en la memoria como bitmaps una vez que se han abierto. Esto significa que una imagen de 5MB en realidad puede consumir más memoria de la que permite un solo subproceso PHP, lo que resulta en un error fatal. Tuve este problema con algunas cargas de imágenes y tuve que reducir el tamaño máximo de archivo que permití solucionar el problema.

Buena suerte y esperanza que ayude.

+0

gracias por la pista, lo puse, pero desafortunadamente no solucionó el problema. –

+0

Disculpa que no funcionó. Acabo de encontrar esto en el manual de PHP en la página para imagecreatefromjpeg: "Me di cuenta de que:. imagecreatefromjpeg es para .JPEG y .JPG terminando y imagecreatefromjpeg es para .jpeg .jpg y terminando Esa función es sensible a mayúsculas. " ¿Será que? No lo he intentado así que no puedo decir si eso es todo. Además, si su servidor web tiene ImageMagick y la extensión Imagick instalada, tal vez podría intentarlo y ver si tiene el mismo error ... – Jeremy

+1

También hubo este comentario en el manual: "Si obtiene este error:" Advertencia: imagecreatefromjpeg(): gd-jpeg: la biblioteca JPEG informa de un error irrecuperable "luego verifique los archivos JPEG. Si se guardan en formato CMYK (en lugar de RGB), entonces GD no los cargará (probado con GD 2.0.12)". Finalmente, hubo comentarios sobre imágenes tomadas con ciertas cámaras que escribían información adicional en los encabezados JPEG causando problemas.Con suerte, una de estas ideas resolverá su problema. – Jeremy

-2

Esta imagen causa una solicitud interminable al servidor en Firefox (3.6.10). Firefox dice que contiene errores.

+0

Acabo de probarlo en firefox mac (3.5.11) y se abre correctamente. También Chrome, IE8 no hay problemas ... –

+0

Sí, puedo ver la imagen, pero la carga nunca termina y si intento detenerla, aparece el error anterior. – ilcartolaio

0

También me enfrento al mismo problema.

que se utiliza por debajo de código para solucionar este problema y funciona para mí,

... 
$image = @ImageCreateFromJpeg($image_name); 
if (!$image) 
{ 
    $image= imagecreatefromstring(file_get_contents($image_name)); 
} 
... 

la esperanza que esto le ayuda ... :)

Cuestiones relacionadas