Ver Mensaje Individual
  #1  
Antiguo 04-09-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Reputación: 11
bucanero Va camino a la fama
imagecreatefromstring detiene el script

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
Responder Con Cita