Cita:
Empezado por dec
Hola a todos,
Supongo que sí... pero... ¿estás mostrando los posibles errores de PHP? Esto es, al comienzo del script, prueba a añadir las siguientes líneas de código:
Código PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1);
|
David gracias por responder!!!
Si, esta activo el modo de depuración. De echo la librería GD devuelve exactamente el error que encuentra. El error en particular es:
Código:
Fatal error: imagecreatefromstring(): gd-jpeg: JPEG library reports unrecoverable error: Bogus marker length in itest.php on line 53
El error es correcto es de la propia imagen por estar corrupta (parece ser que el tamaño de los datos contenidos en la imagen es distinto al definido por las dimensiones de la imagen). Y ese mismo error también lo obtengo al intentar leer esa imagen con cualquier programa externo de imagenes en windows.
El problema es de la libreria GD y de PHP que detiene la ejecución ...
Este es mi código completo que utilizo para hacer la prueba de comprobación y en donde ya se da el fallo:
Código PHP:
<?php
// https://bugs.php.net/bug.php?id=73986
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set ('gd.jpeg_ignore_warning', 1);
register_shutdown_function('fatalErrorShutdownHandler');
function fatalErrorShutdownHandler() {
global $filename;
$last_error = error_get_last();
if ($last_error['type'] === E_ERROR && ($filename != '') ) {
echo "<BR/>\r\r(" . __LINE__ . ") ERROR: {$filename}. Ejecución detenida.";
}
}
function GetImageInfo($filename, &$errorMsg) {
/* Abrimos el archivo según su contenido */
$result = false;
try {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$result = finfo_file($finfo, $filename);
} catch (Exception $e) {
$errorMsg .= $e->getMessage();
} finally {
finfo_close($finfo);
}
return $result;
}
function checkImage($filename, &$errorMsg) {
$result = false;
$errorMsg = '';
try {
$image = false;
if ($filename == "") {
$errorMsg .= "El nombre de fichero esta vacio";
} elseif ( !file_exists($filename) ) {
$errorMsg .= "La ruta del fichero no es correcta";
} elseif ( !$infoFile = GetImageInfo($filename, $errorMsg) ) {
$errorMsg .= "{$filename}: No se ha podido obtener informacion del fichero";
}elseif (( $infoFile != 'image/jpeg' ) && ( $infoFile != 'image/png' )) {
$errorMsg .= "{$filename}: Formato de imagen no soportado";
} elseif (!$image_data = file_get_contents($filename)) {
$errorMsg .= "{$filename}: Contenido no disponible";
} elseif(!$image = imagecreatefromstring($image_data)) {
$errorMsg .= error_get_last()['message'];
} else {
unset($image);
$result = true;
} // if
} catch (Exception $e) {
$errorMsg .= $e->getMessage();
} finally {
return $result;
}
} // function
$errorMsg = '';
$filename = '3612272.jpg';
if ( !checkImage($filename, $errorMsg) ) {
echo "<BR/>\r\r(" . __LINE__ . ") ERROR: {$filename} {$errorMsg}";
} else {
echo "{$filename} OK";
}
?>
y dejo enlace a la imagen corrupta por si alguien quiere hacer pruebas en su propio equipo