Foros del Web » Programando para Internet » PHP »

Problema con archivos pesados...

Estas en el tema de Problema con archivos pesados... en el foro de PHP en Foros del Web. Hola buen día a todos, Tengo un pequeño problema en un desarrollo que estoy ejecutando. Resulta ser que el código que les coloco al final ...
  #1 (permalink)  
Antiguo 12/07/2007, 07:27
 
Fecha de Ingreso: abril-2007
Mensajes: 101
Antigüedad: 17 años
Puntos: 0
Pregunta Problema con archivos pesados...

Hola buen día a todos,

Tengo un pequeño problema en un desarrollo que estoy ejecutando. Resulta ser que el código que les coloco al final (código de prueba), funciona correctamente si lo ejecuto con archivos relativamente pequeños (lo probe hasta 1 Mb), pero realmente esta hecho para ser ejecutado con archivos de 300 y 400 Mb.

Al ejecutarse con archivos pequeños, me genera la salida por pantalla de los valores; pero cuando lo ejecuto con los archivos reales, simplemente tarda un rato "cargando" los datos y luego de aproximadamente media hora me muestra la tipica pantalla de que no hay conexión "No se puede mostrar la página".

Alguno tiene idea de Por Qué Pasa Esto?

Código PHP:
$archivo=$_GET['archivo'];
set_time_limit(30000);
                
$contenido file_get_contents($archivo);                                
                
$arreglo explode("\n"$contenido);
                
$lineas count($arreglo);
                for(
$i=0;$i<$lineas;$i++)
                {
                    echo 
"Línea ".$ah y ."<br>";
                    
$elementos split("{"$arreglo[$i]);
                    
$cantidad count($elementos);
                    for(
$j=0;$j<$cantidad;$j++)
                        echo 
"Elemento ".$j."= ".$elementos[$j]."<br>";
                    echo 
"Fin de línea ".$i."<br><br>";
                } 
Muchas gracias de antemano,

Nau (semi desesperado...)
  #2 (permalink)  
Antiguo 12/07/2007, 08:00
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
De acuerdo Re: Problema con archivos pesados...

Pues lo que podrias hacer es extender el tiempo de ejecución de tu script con set_time_limit(),ponle no se un 50000 seg, aunque es una barbaridad permitir que los usuarios suban archivos de hasta 400 mb.

Saludillos.
  #3 (permalink)  
Antiguo 12/07/2007, 08:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Problema con archivos pesados...

Aparte para archivos TAN grandes es una pesima idea usar file_get_contents, para tal cantidad de archivos lo mas recomendable es usar fopen, y fread e ir leyendo y limpiando recursos porque adicionalmente a modificar set_time_limit tendras que cambiar en el PHP.ini los valores de que tanta memoria ram puede ejecutar un archivo.

Saludos.
  #4 (permalink)  
Antiguo 12/07/2007, 09:14
 
Fecha de Ingreso: abril-2007
Mensajes: 101
Antigüedad: 17 años
Puntos: 0
Re: Problema con archivos pesados...

weno MAULED ya he probado con valores mayores en el set_time_limit() e igualmente no funciona... GATORV en otros post alvlin me recomendo usar esa funcion... de todas formas ya lo habia probado hacerlo con fopen y fread leyendo poco a poco el archivo (iba leyendo cada 8 kb) y sin embargo hacia el mismo error... como podria modificar el php.ini para aumentar la memoria ram? lo que pasa es q ese archivo de 400Mb es lo que tiene q almacenarse en la BD y es un proceso que debe ejecutar el sistema en si...

Una solución que imagino es que sería bueno ir leyendo porciones del archivo y luego ir liberando esa memoria! pero el problema fundamental es que eso son registros para la BD y si en la lectura de la "partición" el registro no esta completo quedaría mal cargada la BD... Que recomiendan y/o piensan?
  #5 (permalink)  
Antiguo 12/07/2007, 09:22
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 21 años, 5 meses
Puntos: 20
Re: Problema con archivos pesados...

La configuración por defecto del php pone un límite de 2 Mb, creo recordar, a los archivos que se suben. Tienes que cambiar estas tres directivas del php.ini para permitir archivos más grandes:

upload_max_filesize
max_execution_time
post_max_size
  #6 (permalink)  
Antiguo 12/07/2007, 09:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Problema con archivos pesados...

Adicional a esos tambien necesitas cambiar estos:
Código PHP:
max_execution_time 60     Maximum execution time of each scriptin seconds
max_input_time 
60    Maximum amount of time each script may spend parsing request data
memory_limit 
32M      Maximum amount of memory a script may consume (16MB
Y si es un archivo de base de datos, en serio te recomiendo usar fread con fopen e ir leyendo poco a poco, y al mismo tiempo insertando no lo quieras hacer en dos pasos distintos ej:
Código PHP:
$fh fopen"archivo.dat""r" );
while( !
feof$fh ) ) {
     
$chunk fread$fh4096 );
     
$chunk trim$chunk );

     
// hacer algo con $chunk
     
$query "INSERT INTO algo ('$chunk')";
     
$db->Query$query );

Como ves la lectura y la insercion se hacen en el mismo ciclo, ahora si tienes que cambiar el tiempo limite por la cantida de datos que vas a procesar.

Saludos.
  #7 (permalink)  
Antiguo 12/07/2007, 14:11
 
Fecha de Ingreso: abril-2007
Mensajes: 101
Antigüedad: 17 años
Puntos: 0
De acuerdo Re: Problema con archivos pesados...

Ok... bueno me fumaré mi lumpia y empezaré a ver como hago para q el ultimo pedazo del archivo que lea no lo elimine si no tiene "\n" (salto de linea no???) y lo almacene para no perder esa información...

Por cierto, para liberar esa memoria de la variable es suficiente con que reinicie la variable o tengo que aplicarle alguna función de php?

Muchas gracias por su ayuda!
  #8 (permalink)  
Antiguo 12/07/2007, 15:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Problema con archivos pesados...

Basta con que la vuelvas a usar o uses unset en la variable.

Saludos
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 05:59.