2011-07-04 16 views
5

¿Hay alguna forma de que PHP determine si un archivo de imagen está dañado y no podrá mostrarse correctamente?¿Hay alguna forma de que PHP detecte una imagen dañada?

He intentado consultar con fopen y comprobar si la URL es válida, pero no funcionó.

+0

Broken in in corrupted or missing? – AlienWebguy

+0

dup: http://stackoverflow.com/questions/3677965/php-detecting-if-source-image-url-link-leads-to-a-broken-image –

+0

PHP no muestra imágenes, * navegadores * do . Tal vez te refieres a PHP no podrá enviarlo al navegador ... – pavium

Respuesta

3

solución Javascript (jQuery con la participación, aunque esto debería ser posible prescindir de él también):

<script type='text/javascript'> 
    $(function(){ 
     var files = [ 
      'warning-large.png', 
      'warning-large-corrupted.png', 
      'http://www.example.com/none.gif', 
      'http://sstatic.net/stackoverflow/img/favicon.ico' 
     ]; 
     for (var n in files) { 
      var img = $('<img/>'); 
      img.error(function(){ 
       alert('error:\n' + this.src); 
      }); 
      img.load(function(){ 
       alert('success:\n' + this.src); 
      }); 
      img.attr('src', files[n]); 
     } 
    }); 
</script> 
3

Si se refiere roto como en un 404, y no una imagen corrupta, siempre se puede usar algo en la línea de:

if (file_exists($imageFileName)) { 
    .. 
} 
+0

Tenga en cuenta que 'file_exists()' verifica ambos archivos y ** directorios **. Sugeriría usar 'is_file()'. – binaryLV

+0

está bien, entonces imagecreatefromstring parece hacer el trabajo ... ahora tengo un problema diferente, y eso es porque las imágenes que estoy exhibiendo ya están desfasadas ... así que necesito que se calle sobre la imagen distorsionada ... .si se muestra bien, está bien ... entonces las advertencias están en el camino ahora. – Piotr

+0

nevermind ... encontró la solución. ¡muchas gracias a todos los que se tomaron el tiempo para ayudar! :) – Piotr

0

si los archivos están ahí en su cheque servidor utilizando la función file_exists en php

http://php.net/manual/en/function.file-exists.php

+0

Tenga en cuenta que 'file_exists()' verifica ambos archivos y ** directorios **. Sugeriría usar 'is_file()'. – binaryLV

+0

hola gracias, pero esto no funciona ... aún ve la imagen como válida, es decir, no está corrompida, e intenta mostrarla ... solo la muestra con el icono de "imagen rota" ... – Piotr

+0

Sus imágenes no están allí o está dañado? –

18

Is there any way to have PHP determine whether an image file is broken

Si por roto que quiere decir corrompido, los cambios son el imagecreatefrom{extension} no será capaz de leerlos ya sea:

if(imagecreatefromjpeg($yourfile) !== false) { 
    // image is okay. 
} 
+1

+1 ¡Es una muy buena idea! – jerluc

+0

A veces es una buena idea, a veces no lo es. Probablemente generará una advertencia en caso de error. Las advertencias pueden ignorarse al usar '@', aunque eso también ignoraría los errores "* Error fatal: función no encontrada *", que serían difíciles de depurar.Además, cuando utilicé 'imagecreatefromjpeg()' en un archivo PHP, la solicitud HTTP falló con el mensaje "* La conexión se reinició *" en Firefox y obtuve "* Advertencia de PHP: imagecreatefromjpeg(): gd-jpeg: biblioteca JPEG informa irrecuperable error * "error en el registro de Apache (¡no PHP!), que también sería muy difícil de depurar. En mi humilde opinión, esta es una mala idea. – binaryLV

+0

@binaryLV obviamente no me refiero a la verificación en tiempo real. No debe hacer cosas como esta mientras los visitantes miran la página, pero está bien en un script separado. Además, recibo los errores en mis registros de errores de PHP, por lo que podría haber sido su configuración. No creo que sea una mala idea, siempre que ejecute el script usted mismo, en lugar de usarlo en cada página vista (lo que molestará a los visitantes). –

0

Una excelente manera de ver todos sus últimos archivos rotos es usar cpanel "Error Log" que le mostrará los últimos 300 archivos rotos.

1

Esto funciona para mí 100% :) Me probar si existe imagen file_exists() y si existe, podrás capturar imágenes corruptas con esto.

<img src="your_image_source" onerror="this.src='/path/to/backup/file'"> 
Cuestiones relacionadas