Foros del Web » Programando para Internet » PHP »

allowed memory size exhausted (100mb)

Estas en el tema de allowed memory size exhausted (100mb) en el foro de PHP en Foros del Web. Se que el tema esta tratado varias veces, pero no entiendo por que una foto de 4mb me pone exhausto un servidor al que le ...
  #1 (permalink)  
Antiguo 20/11/2010, 08:20
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Mensaje allowed memory size exhausted (100mb)

Se que el tema esta tratado varias veces, pero no entiendo por que una foto de 4mb me pone exhausto un servidor al que le digo que tiene 100mb disponibles para procesar...

Código PHP:
Ver original
  1. Fatal error: Allowed memory size of 104857600 bytes exhausted (tried to allocate 10000 bytes) in /var/www/vhost/estudiodigital.es/home/html/galeria/app/utiles/miniaturizador/GdThumb.inc.php on line 107

Debería asignarle más memoria aún? Lo que tengo es esto:

Código PHP:
Ver original
  1. ini_set('display_errors', TRUE);
  2. ini_set('memory_limit', '100M');
  #2 (permalink)  
Antiguo 20/11/2010, 08:29
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: allowed memory size exhausted (100mb)

Podrías poner el código para updatear la imagen?
  #3 (permalink)  
Antiguo 20/11/2010, 08:31
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: allowed memory size exhausted (100mb)

Si, pero es un tanto extenso:

Código PHP:
Ver original
  1. ini_set('display_errors', TRUE);
  2. ini_set('memory_limit', '100M');
  3.  
  4. // procesa las fotos de albums, pero tambien la foto de perfil, si es cambiada
  5.  
  6. function procesar_foto($album_id = null, $es_album) {
  7.    
  8.     if($es_album)
  9.         $carpeta = ALBUMS;
  10.     else
  11.         $carpeta = PERFILES;
  12.    
  13.     if (!is_writable ($carpeta))
  14.         $respuesta['error'] = "Error de escritura en la carpeta '".$carpeta."'<br/>";
  15.    
  16.     // Tamaño minimo para las imagenes
  17.     $medidas_px = getimagesize($_FILES['foto']['tmp_name']);   
  18.     if($medidas_px[0] < ANCHO_FOTO)
  19.     {
  20.         if(!$es_album) return null; // no se cambiara la foto de perfil
  21.        
  22.         $respuesta['error'] = "<b>La foto debe medir al menos 220px de ancho</b><br/>No se guardo: ".$_FILES['foto']['name']."<br/><br/>";
  23.        
  24.         return $respuesta;
  25.     }
  26.        
  27.     if(!isset ($_FILES["foto"]) || !is_uploaded_file($_FILES['foto']['tmp_name']) )
  28.         return false;
  29.        
  30.     // nombre y extension:
  31.     $nombre_temporal = $_FILES['foto']['name'];
  32.     $subdividir = pathinfo( $nombre_temporal );
  33.     $extension  = strtolower($subdividir['extension']);
  34.     $nombre     = strtolower(basename( $nombre_temporal ,'.'.$extension) ); // $subdividir['filename'] no funcion en php 5.1
  35.  
  36.     // solo numero letras y guiones bajos
  37.     $nombre_limpio = preg_replace("/[^a-zA-Z0-9s]/", "_", $nombre);
  38.    
  39.     if($es_album)
  40.         $nombre_disponible = checkear_preexistencia($nombre_limpio, $extension, $album_id);
  41.     else
  42.         $nombre_disponible = $nombre_limpio;
  43.    
  44.     $nuevo_nombre = $nombre_disponible . "." . $extension;
  45.    
  46.     // entensiones permitidas
  47.     $permitidas = array("jpg", "jpeg", "gif", "png");
  48.  
  49.     if (in_array($extension, $permitidas))
  50.       {
  51.       if ($_FILES["foto"]["error"] > 0)
  52.         {
  53.         $respuesta['error'] = "Hubo un error: " . $_FILES["foto"]["error"] . "<br />";
  54.         }
  55.       else
  56.         {
  57.         // hago la miniatura
  58.         require_once UTILES.'miniaturizador/ThumbLib.inc.php';
  59.  
  60.         $options = array('jpegQuality' => 80);
  61.  
  62.         $temporal = $_FILES['foto']['tmp_name'];
  63.         $temporal = urldecode($temporal);
  64.  
  65.         try
  66.         {
  67.              $thumb = PhpThumbFactory::create($temporal, $options);
  68.              $zoom = PhpThumbFactory::create($temporal, $options);
  69.         }
  70.         catch (Exception $e)
  71.         {
  72.              $respuesta['error'] = "Error escalando la imagen.<br/>";
  73.         }
  74.        
  75.         // guarda la foto recortada y minimizada
  76.         if($es_album)
  77.         {  
  78.             if ($thumb->adaptiveResize( ANCHO_FOTO , ALTO_FOTO )->save($carpeta.$album_id."/".$nuevo_nombre))
  79.                        if ($zoom->adaptiveResize( ANCHO_FOTO_ZOOM, ALTO_FOTO_ZOOM )->save($carpeta.$album_id."/zoom"."/".$nuevo_nombre)) // magnificadas
  80.                        {
  81.                             $respuesta['ok'] = true;
  82.                             $respuesta['nombre_foto'] = $nuevo_nombre;
  83.                             $respuesta['sin_ext'] = str_replace("_"," ", ucfirst($nombre_limpio));  // nombre sugerido                     
  84.                             return $respuesta;
  85.                         }
  86.         }
  87.    
  88.         else
  89.         {
  90.            
  91.             if ($thumb->adaptiveResize( ANCHO_FOTO , ALTO_FOTO )->save($carpeta.$nuevo_nombre)) // 228x140
  92.                 return $nuevo_nombre;
  93.             return false;  
  94.         }
  95.       }
  96.     }
  97.     else
  98.       {
  99.       $respuesta['error'] = "Archivo de foto invalido. Solo se admiten fotos de formato: .jpg .png or .gif<br/>";
  100.       return $respuesta;
  101.       }
  102. }
  #4 (permalink)  
Antiguo 20/11/2010, 11:46
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años
Puntos: 101
Respuesta: allowed memory size exhausted (100mb)

Puse un limite máximo de 4mb para los upload y dediqué 120mb para procesarlas. Eso aparentemente funciona.

Si alguien me puede explicar por qué es necesaria taanta memoria para una foto, escucho.

Saludos!
  #5 (permalink)  
Antiguo 20/11/2010, 21:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: allowed memory size exhausted (100mb)

Una foto aunque pese 4 MB, realmente esta comprimida, muy comprimida (más en formatos como JPG) por lo que al descomprimirla y pasarla a su formato RAW, que es necesario para poder procesarla con PHP, puede llegar a pesar mucho más de 100 MB, es por eso que tu memoria se acaba.

Saludos.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:31.