Ver Mensaje Individual
  #3 (permalink)  
Antiguo 02/07/2008, 12:49
Avatar de marcosr
marcosr
 
Fecha de Ingreso: agosto-2005
Ubicación: Montevideo, Uruguay
Mensajes: 451
Antigüedad: 19 años, 3 meses
Puntos: 5
Respuesta: Problema con memoria máxima en PHP.

Marvin, muchas gracias por responder.

Te cuento que he estado probando algunas configuraciones hasta llegar a colocar 1Gb de memoria máxima para PHP [ini_set("memory_limit", "1024M");] y 20 minutos de tiempo máximo de ejecución [set_time_limit(1200);]. Aún así, se consume todo el tiempo y me da un error de que el script ha superado los 20 minutos de tiempo máximo de ejecución.

Te parece que pueda demorar más de 20 minutos en crear un RAR de 150Mb?

Saludos.

Adjunto el código para ver si encuentran algún error tonto que no halla visto...

Código PHP:
function createzip($struct,$namezip=0)
    {     
$ZipData = array(); 
        
$Dircont = array(); 
        
$DirFile = array();
        
$offseto 0;        
        while(list(
$file,$data)=each($struct))
        {    
$filestr_replace("\\""/"$file);  
            
$dir=explode("/",$file);
            for(
$i=0$i<sizeof($dir); $i++)if($dir[$i]=="")unset($dir[$i]);                    
            
$num=count($dir); //Total de niveles
            
$ele=0;            //Nivel actual
            
$dirname="";      //Nombre archivo o directorio
            
while(list($idx,$val)=each($dir))
            {    
$ty=(++$ele)==$num?true:false;
                
$ty=trim($data)!=""?$ty:false;//Compruebar si el ultimo elemento es directorio o archivo
                
$dirname.=$val.($ty?"":"/");
                if(isset(
$DirFile[$dirname]))continue; else $DirFile[$dirname]=true;            
                
$gzdata="";                
                if(
$ty)
                {    
$unziplen=strlen($data);  
                    
$czip=crc32($data);  
                    
$gzdata=gzcompress($data);  
                    
$gzdata=substr(substr($gzdata,0,strlen($gzdata)-4),2); 
                    
$cziplen=strlen($gzdata);  
                }                        
                
$ZipData[]="\x50\x4b\x03\x04".($ty?"\x14":"\x0a")."\x00\x00\x00".($ty?"\x08":"\x00")."\x00\x00\x00\x00\x00".
                           
pack("V",$ty?$czip:0).pack("V",$ty?$cziplen:0).pack("V",$ty?$unziplen:0).pack("v",strlen($dirname)). 
                           
pack("v",0).$dirname.$gzdata.pack("V",$ty?$czip:0).pack("V",$ty?$cziplen:0).pack("V",$ty?$unziplen:0);
                
$Dircont[]="\x50\x4b\x01\x02\x00\x00".($ty?"\x14":"\x0a")."\x00\x00\x00".($ty?"\x08":"\x00")."\x00\x00\x00\x00\x00".
                           
pack("V",$ty?$czip:0).pack("V",$ty?$cziplen:0).pack("V",$ty?$unziplen:0).pack("v",strlen($dirname)). 
                           
pack("v").pack("v",0).pack("v",0).pack("v",0).pack("V",$ty?32:16).pack("V",$offseto).$dirname;          
                
$offseto=strlen(implode("",$ZipData));            
            }
//Fin While dir        
        
}//Fin While archivos
        
$data implode("",$ZipData);  
        
$cdir implode("",$Dircont);      
        
$data=$data.$cdir."\x50\x4b\x05\x06\x00\x00\x00\x00".pack("v",sizeof($Dircont)).pack("v",sizeof($Dircont)).pack("V",strlen($cdir)).pack("V",strlen($data))."\x00\x00";
        if(
$namezip)//Construir el archivo
        
{    if(($fp=fopen($namezip,"wb")))
               {    
fwrite($fp,$data);
                
fclose ($fp);
                return 
true;
            }else return 
false;
        }else return 
$data;       
    }
    
    function 
fun_dir($dir,&$A,$path=0)
    { 
$d dir($dir);
      
$path=$path?$path:$dir;
      while(
$df=$d->read()) 
      { if(
$df=="." || $df=="..")continue;
        if(
is_file($d->path.$df))
         { 
$A[str_replace($path,"",$d->path.$df)]=file_get_contents($d->path.$df);
         }
        else 
         { 
$A[str_replace($path,"",$d->path.$df)."/"]=""
           
fun_dir($d->path.$df."/",$A,$path); 
         }
      } 
$d->close();   
    }
     
    
$cont=array();
    
fun_dir("../../../home/www/"$cont);
    
$cont["generado.txt"]="Zip generado".date("Y-m-d H:i:s");
    
$data createzip($cont);
    
    
header("Pragma: public");
    
header("Expires: 0");
    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
header("Cache-Control: private",false);
    
header("Content-Description: File Transfer"); 
    
header("Content-Type: application/force-download"); 
    
header("Content-Length: " strlen($data)); 
    
header("Content-Disposition: attachment; filename=respaldoS.zip"); 
    echo 
$data
__________________
Yo hago preguntas inteligentes para obtener respuestas rapidas, y vos?
(únete a la campaña !)