Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/11/2010, 08:31
Avatar de mayid
mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
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. }