Hola buenas tardes,
Aquí vengo con un BUGS esta vez en PHP, que suerte todos los voy encontrando yo
...,
en particular se trata de un BUGS en la librería GD que lo que hace es elevar a error desconocido cualquier error que encuentra la propia librería y deteniendo totalmente el script que se esta ejecutando.
Aquí se comenta el BUGS que también tiene ya su tiempo
https://bugs.php.net/bug.php?id=70315
El problema en particular me afecta en PRESTASHOP que utiliza estas librerías para procesar las imágenes/miniaturas. Y en particular en el proceso de generación de miniaturas, donde siempre se detiene (debido al BUGS) en la misma imagen, sin llegar a finalizar ni a procesar el resto de las miniaturas que tiene la tienda, por lo que nunca avanza.
Intente solventarlo, antes de conocer que el problema es debido a este bug, creando un script alternativo que detecte y elimine las imágenes no validas para lo que cree una función que las chequea en el servidor para comprobar si son correctas, pero en cuanto llega a analizar la primera imagen con error en particular cuando llega al comando
imagecreatefromstring() que es un comando de la librería GD el script se detiene y se acaba el proceso... no haciendo caso por mas que lo he intentado de los bloques
try ... catch ... finally
Este es mi código:
Código PHP:
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
- ¿Alguien mas que haya tenido este problema?
- ¿Alguna otra alternativa o solución para determinar si una imagen es correcta o no en PHP?
Gracias por su tiempo y colaboración
saludos