Foros del Web » Programando para Internet » PHP »

Ejecucion de un programa

Estas en el tema de Ejecucion de un programa en el foro de PHP en Foros del Web. Buenas ( días | tardes | noches ) tengan ustedes!!... Bien, esta vez les vengo con una duda, existancial, no es suma importancia pero me ...
  #1 (permalink)  
Antiguo 12/08/2011, 03:03
danneg
Invitado
 
Mensajes: n/a
Puntos:
Busqueda Ejecucion de un programa

Buenas ( días | tardes | noches ) tengan ustedes!!...

Bien, esta vez les vengo con una duda, existancial, no es suma importancia pero me gustaria resolverla.

Resulta que u compañero me pidio ayuda para un sistema que estaba aciendo, se trataba de un registrador masivo de datos.

Eventualmente a el cliente se le proporciona un archivo con cierta cantidad de personas en el, digamos, unas 13mil

Mi compañero tenia que sacar de ese archivo las 13mil personas y guardarlas en la base de datos.

Este archivo tienes que ser subido a una web, el archivo pesa al rededor de 16mb, primero tubimos que resolver eso, añadiendo estas lineas al .htaccess

Código Apache:
Ver original
  1. php_value upload_max_filesize 100M
  2. php_value post_max_size 100M
  3. php_value max_execution_time 1000
  4. php_value max_input_time 1000

Segundo, el archivo tiene esta estructura


Código txt:
Ver original
  1. catastro   |nic   |nombre   |dir   |municipio   |barrio   |estado
  2. catastro   |nic   |nombre   |dir   |municipio   |barrio   |estado
  3. catastro   |nic   |nombre   |dir   |municipio   |barrio   |estado
  4. catastro   |nic   |nombre   |dir   |municipio   |barrio   |estado
  5. catastro   |nic   |nombre   |dir   |municipio   |barrio   |estado

Eso lo repetiriamos 13mil veces...

Ahora, para hacer la insersion masiva, le proporciones este codigo (como sugerencia)...

Código PHP:
Ver original
  1. <?php
  2.  
  3.     $db_file = "muchosusuarios.txt";
  4.     $db = file($db_file);
  5.     $order = array_reverse($db);
  6.     $contar_usuarios = count($order);
  7.     $c = 0;
  8.     for ( $i = 0; $i < $contar_usuarios; $i++){
  9.         $e = $i;
  10.         $user = $order[$e];
  11.         $dato = explode("|", $user);
  12.  
  13.         $insert = new mysqli( "localhost", "root", "", "test" );
  14.         if ( mysqli_connect_errno () ) {
  15.             echo "Error: " . mysqli_connect_error();
  16.         }
  17.  
  18.         $_sql = "INSERT INTO `prueba` ("
  19.             .   '`catastro`'
  20.             .   ', `nic`'
  21.             .   ', `nombre`'
  22.             .   ', `dir`'
  23.             .   ', `municipio`'
  24.             .   ', `barrio`'
  25.             .   ', `estado`'
  26.             .   ") VALUES (?, ?, ?, ?, ?, ?, ?)";
  27.         $_ins_bd = $insert->prepare($_sql);
  28.         $_ins_bd->bind_param ('sssssss'
  29.                 ,   $dato[0]
  30.                 ,   $dato[1]
  31.                 ,   $dato[2]
  32.                 ,   $dato[3]
  33.                 ,   $dato[4]
  34.                 ,   $dato[5]
  35.                 ,   $dato[6]
  36.             );
  37.         $insert_into = $_ins_bd->execute();
  38.  
  39.         $c = $c++;
  40.         $insert->close();
  41.     }
  42.     echo "Se registraron {$c} usuarios."
  43. ?>

Bien, esto anda perfecto, tarda alrdedor de 10m/13mil Usuario en ejecutar.

Ya se ha ejecutado varias veces, y he aqui la duda

Sin querer cerre la pestaña del navegador, y pense que se iba a truncar el script, pero mi sorpresa al revisar la bd, es que los usuarios seguian ingresandose

La pregunta es, ¿El programa se sigue ejecutando en el servidor aun cuando la ventana no este abierta?

Ustede, ¿que opinan?... al menos yo nunca lo imagine

  #2 (permalink)  
Antiguo 12/08/2011, 03:12
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: Ejecucion de un programa

Si, se sigue ejecutando, pues la ejecución es asíncrona con respecto al cliente. Es decir, el cliente monta la petición HTTP y la envía, el servidor la recibe, ejecuta el script y envía la respuesta.

Aunque cierres el cliente, el script se mantiene en ejecución, lo único es que cuando envíe la respuesta, el cliente ya no la escuchará y se perderá, pero da igual, porque la mensajería no es certificada, se pierde y no pasa absolutamente nada más.

Espero haberte aclarado la duda. Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #3 (permalink)  
Antiguo 12/08/2011, 03:18
danneg
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ejecucion de un programa



Si, aclarado!!.. con esto se me ocurren muchas formas de auto-infectarme XD... en fin, tendre que ver que probecho le pedo sacar a esta informacion... y como evitar que se siga ejecutando mientras el cliente no vea nada, podria resultar contraproducente eso para mi
  #4 (permalink)  
Antiguo 12/08/2011, 08:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Ejecucion de un programa

El problema es cuando necesitas la respuesta del proceso, ahí es donde no te puede servir cerrar la pestaña.

Saludos.
  #5 (permalink)  
Antiguo 12/08/2011, 09:36
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: Ejecucion de un programa

Creo que la única forma de impedir este tema sería con COMMIT. Es decir, se insertan todos los datos, pero no se commitean hasta que el usuario lo acepte. Cuando terminen las inserciones muestras una ventana al usuario poniendo un submit para hacer el commit. Si le da al botón se hace el commit y se cierra la base de datos.

Así, si el usuario ha cerrado la ventana, no podrá recibir el form con el commit y las inserciones no se harán efectivas. Intenta tirar siempre de las herramientas de la base de datos, a veces pecamos de programar en PHP cosas que se hacen de forma casi directa en bases de datos.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #6 (permalink)  
Antiguo 12/08/2011, 14:13
danneg
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ejecucion de un programa

Pues supongo que la alternativa rapida en este tipos de caso seria hacer uso del querido ajax, en cuanto se detecte que la ventana se cierra, mandar un comando que detenga el script, y no se, tal vez mandar el resultado al correo electronico del cliente, y guardar el resultado yo, para que la proxima vez que se ejecute el codigo, comience desde ese punto

Mis ideas vuela, aun asi gracias por sus opiniones, me gustaria saber mas opinines, el tema sigue abierto!

Un saludo!

Etiquetas: ejecucion, mysql, programa, sql, usuarios
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 04:42.