Foros del Web » Programando para Internet » PHP »

PHP OO Script continua al cerrar la pagina

Estas en el tema de Script continua al cerrar la pagina en el foro de PHP en Foros del Web. Cree una pagina en php que copia archivos pdf de una carpeta a otra dependiendo de los datos de la base de datos, algo muy ...
  #1 (permalink)  
Antiguo 05/04/2016, 16:43
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 12 años, 1 mes
Puntos: 2
Script continua al cerrar la pagina

Cree una pagina en php que copia archivos pdf de una carpeta a otra dependiendo de los datos de la base de datos, algo muy sencillo.

Dejo el codigo

Código PHP:
$directorio_raiz "pdf/";
$destino_alta "pdf/alta/";
$destino_baja "pdf/baja/";

$conexionmysql_connect("localhost""root""******"); 
mysql_select_db("mydb"$conexion); 

$sql "SELECT * FROM empleado";
$result mysql_query($sql$conexion); 

while (
$row mysql_fetch_row($result)){
      
$file $row["archivo"];
       if(
$row["status"]=="alta"){
              
copy($directorio_raiz $file$destino_alta $file);
       }else{
              
copy($directorio_raiz $file$destino_baja $file);
       }
       
unlink($directorio_raiz $file);

El codigo funciona y funciona bien para lo que necesito, el problema esta en que si cierro la pagina de mozilla donde se ejecuta los archivos se siguen copiando de carpeta en carpeta. Segun yo eso no deberia pasar, si se cierra la pagina debe detenerse el script, esto es correcto? De no ser así como puedo hacer para detener el script al cerrar la pagina

Espero haberme explicado de forma clara, si no me avisan para explicarlo mejor. De antemano gracias por su apoyo
  #2 (permalink)  
Antiguo 06/04/2016, 02:32
 
Fecha de Ingreso: mayo-2013
Mensajes: 169
Antigüedad: 6 años, 5 meses
Puntos: 25
Respuesta: Script continua al cerrar la pagina

Un script php se ejecuta en cuanto un usuario hace una petición http al servidor. Y termina cuando acaba todo el proceso, enviando una respuesta al navegador. El cierre del navegador no influye en nada al servidor, ya que este seguira ejecutando el SCRIPT PHP.

Lo que puedes hacer es crear una variable de $_SESSION en PHP iniciandola a true, y en otro script, cuando el usuario cierre el navegador (lo controlas con javascript) y haces la llamada ajax a ese nuevo script que pondria la variable de sesion en false.

Y dentro del bucle que tengas para recorrer los campos de la base de datos, pones una condición donde compruebes esa variable. Y si es false, interrumpes el script.

Aunque esto que te digo tiene sus pros y sus contras.
  #3 (permalink)  
Antiguo 06/04/2016, 05:55
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 926
Antigüedad: 12 años, 7 meses
Puntos: 269
Respuesta: Script continua al cerrar la pagina

Mira la documentacion de ignore_user_abort y connection_aborted en el manual de PHP
  #4 (permalink)  
Antiguo 06/04/2016, 09:31
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 12 años, 1 mes
Puntos: 2
Respuesta: Script continua al cerrar la pagina

Gracias por sus respuestas.

Amiancht, siento que se volveria mas engorroso el codigo si lo hago como dices, pero lo voy a revisar.

dashtrash, desconozco las funciones de php que me indicas, dejame darle una leida y les digo por este medio

Saludos y nuevamente gracias
  #5 (permalink)  
Antiguo 06/04/2016, 13:23
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 12 años, 1 mes
Puntos: 2
Respuesta: Script continua al cerrar la pagina

Despues de leer las funciones ignore_user_abort, connection_aborted y connection_status (gracias dashtrash) pude hacer que al cerrar la ventana del explorador se detenga el script. Les dejo el codigo que estoy usando probado y funcionando

Código PHP:
Ver original
  1.  
  2. $directorio_raiz = "pdf/";
  3. $destino_alta = "pdf/alta/";
  4. $destino_baja = "pdf/baja/";
  5.  
  6. $conexion= mysql_connect("localhost", "root", "******");
  7. mysql_select_db("mydb", $conexion);
  8.  
  9. $sql = "SELECT * FROM empleado";
  10. $result = mysql_query($sql, $conexion);
  11.  
  12. while ($row = mysql_fetch_row($result)){
  13.       $file = $row["archivo"];
  14.        if($row["status"]=="alta"){
  15.               copy($directorio_raiz . $file, $destino_alta . $file);
  16.        }else{
  17.               copy($directorio_raiz . $file, $destino_baja . $file);
  18.        }
  19.        unlink($directorio_raiz . $file);
  20.  
  21.        //COMPROBAR SI SE PERDIO LA CONEXION CON EL CLIENTE
  22.        echo " "; //se envia al cliente
  23.        ob_flush();
  24.        flush();
  25.  
  26.        if(connection_aborted()){
  27.               $fp = fopen("temp/temp.txt", "a");
  28.                fwrite($fp, "proceso abortado");
  29.                fclose($fp);
  30.                exit;
  31.        }
  32.        
  33. }

Lo que hice para saber si funciona es que al momento de cerrar la pagina me creara un archivo en una carpeta temporal con una leyenda x.

Saludos y nuevamente gracias por su apoyo
  #6 (permalink)  
Antiguo 06/04/2016, 14:55
 
Fecha de Ingreso: mayo-2013
Mensajes: 169
Antigüedad: 6 años, 5 meses
Puntos: 25
Respuesta: Script continua al cerrar la pagina

Cita:
Iniciado por dashtrash Ver Mensaje
Mira la documentacion de ignore_user_abort y connection_aborted en el manual de PHP
No conocía estas funciones me las apunto ^^ +1

Etiquetas: cerrar, mysql, select, sql
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:30.