Hola buenas tardes,
Aquí vengo con un BUGS esta vez en PHP, que suerte todos los voy encontrando yo
![Confused](http://www.clubdelphi.com/foros/images/smilies/confused.gif)
...,
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