Foros del Web » Programando para Internet » PHP »

Barra progreso en proceso como hacerlo?

Estas en el tema de Barra progreso en proceso como hacerlo? en el foro de PHP en Foros del Web. Maestros de la web vengo a buscar su consejo: Tengo 3 programas PHP. 1. Form. 2. Upload archivo. 3. Procesamiento del archivo subido. 1. Tiene ...
  #1 (permalink)  
Antiguo 12/12/2009, 07:05
 
Fecha de Ingreso: enero-2003
Mensajes: 120
Antigüedad: 21 años, 10 meses
Puntos: 0
Pregunta Barra progreso en proceso como hacerlo?

Maestros de la web vengo a buscar su consejo:

Tengo 3 programas PHP.

1. Form.
2. Upload archivo.
3. Procesamiento del archivo subido.

1. Tiene el formulario para seleccionar un archivo a subir, este es un comprimido de un TXT que se descomprime en el punto 3 antes de ser procesado.
2. llamo a un PHP para que suba el archivo y este llama al tercero para procesar.
3. Descomprime y recorre línea por línea con FOPEN y FGET para separar los campos e insertar en una tabla mysql.

El proceso demora mucho en el hosting y no tengo una barra de progreso que pueda indicarme el porcentaje, probé algunas pero no funcionaron, tal vez porque tengo todo en 3 archivos y debería tenerlo en un solo PHP a todo, es así?

El archivo de textos puede llegar a tener 200.000 renglones.
A veces demora tanto que abandono y corto el proceso puede estar unas horas.
Lo probé localmente la parte de descompresión y proceso, y funciona bien. Monitoreo el proceso desde FTP y el archivo es subido y descomprimido correctamente.
El archivo ZIP puede pesar hasta 2 Mb puro texto.
Dejenme algunas sugerencias de cómo y donde colocar la barra de progreso y buscaré solucionarlo muchas gracias.


Programa 1: form.php
Código:
<form action="upload.php" method="post" enctype="multipart/form-data" name="form1">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="9000000"><br> 
<span class="Estilo4">Indique ubicación de <b>detalle.zip</b> a subir (nombre totalmente minúsculas):</span><br> 
<input type="file" name="archivo" size="40" id="archivo"> 
<input type="submit" name="boton" value="Enviar"> 
</form>
Programa 2: (upload.php)
Código:
$copiado=move_uploaded_file($foto, "archivos/".$foto_name); 
$_SESSION["archivo"]=$foto_name;
if($copiado==false){ 
print "error"; 
die();
}else{ 
header("Location: importar3.php");
}

Programa 3 (importar3.php)
Código:
function extractZip2( $zipFile = './archivos/detalle.zip', $dirFromZip = './archivos' ) { 
  $archive = new PclZip($zipFile); 
  return ($archive->extract(PCLZIP_OPT_PATH,$dirFromZip) == 0); 
}
$opcion=extractZip2();

$link=mysql_connect("localhost", "usuario", "contraseña", "base");
mysql_select_db("base", $link) or die(mysql_error());

set_time_limit(50000);
$insertados=0;
$modificados=0;
$lectura=fopen("archivos/detalle.txt", "r");
  while(!feof($lectura)) {
	  $renglon = fgets($lectura);  
          $renglon=str_replace("'"," ",$renglon);
          $campos=explode('|', $renglon); 
// lectura previa para verificar existencia y modificación (update) en caso de que exista
                     $prov=mysql_query("select * from detallef where matricula='".$campos[0]."' and factura='". $campos[1]. "' and registro='".$campos[2]."' and codigo='".$campos[8]."'");
                     if ($row=mysql_fetch_array($prov)) {  // Lectura Exitosa
                             $sql="update  detallef set ";
  			     $sql.=" matricula= '".     $campos[0]."', "; 
    			     $sql.=" factura= '".       $campos[1]."', ";
    			     $sql.=" registro= '".      $campos[2]."', ";
    			     $sql.=" autorizacion= '".  $campos[3]."', ";
    			     $sql.=" fecha='".          $campos[4]."', ";
                             $sql.=" afiliacion='".     $campos[5]."', ";
                             $sql.=" apenom='".         $campos[6]."', ";
                             $sql.=" numero='".         $campos[7]."', ";
    			     $sql.=" codigo='".         $campos[8]."', ";
    		    	     $sql.=" cantidad='".       $campos[9]."', ";
                             $sql.=" importe='".  unir( $campos[10])."' "; // se llama a funcion que convierte a números con dos decimales.
                             $sql.=" where matricula='".$campos[0]."' and factura='". $campos[1]. "' and registro='".$campos[2]."' and codigo='".$campos[8]."'";
                             $result=mysql_query($sql, $link); 
                             $modificados=$modificados+1;
                             if (mysql_error()) {
					             echo "Error Update: $sql"; 
								 die();
				             } 
                     } // end if lectura exitosa
					 else // lectura exitosa
						 { 
                             $insertados=$insertados+1;
                             $sql="INSERT INTO detallef VALUES ('0',";
					     $sql.="'".$campos[0]."',";   // matrícula
					     $sql.="'".$campos[1]."',";    // factura
    					     $sql.="'".$campos[2]."',";     // registro
  					     $sql.="'".$campos[3]."',";      // autorizacion
  					     $sql.="'".$campos[4]."',";       // fecha
  					     $sql.="'".$campos[5]."',";        // afiliacion
  					     $sql.="'".$campos[6]."',";         // apenom
  					     $sql.="'".$campos[7]."',";          // numero
  					     $sql.="'".$campos[8]."',";           // codigo
  					     $sql.="'".$campos[9]."',";            // cantidad
  					     $sql.="'".unir($campos[10])."')";      // importe se llama a funcion que convierte a números con dos decimales.
                            $result=mysql_query($sql, $link); 
                            if (mysql_error()) {
  					          echo "Error Insert: $sql";
  					          die();
  			    } 
                      } // end else de lectura exitosa
      } // end while
	  echo "<br><br>Finalizado.<br>
	  Modificados: $modificados<br>
	  Insertados : $insertados<br>";
__________________
Sergio.
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 22:35.