Foros del Web » Programando para Internet » PHP »

Hilos de ejecucion

Estas en el tema de Hilos de ejecucion en el foro de PHP en Foros del Web. Hola a todos!! la pregunta: ¿podemos tener diferentes hilos de ejecución con php? caso práctico: el usuario de la aplicación web introduce un nuevo registro. ...
  #1 (permalink)  
Antiguo 14/03/2006, 08:06
 
Fecha de Ingreso: mayo-2004
Mensajes: 101
Antigüedad: 19 años, 11 meses
Puntos: 0
Pregunta Hilos de ejecucion

Hola a todos!!

la pregunta: ¿podemos tener diferentes hilos de ejecución con php?
caso práctico: el usuario de la aplicación web introduce un nuevo registro. Insertamos el nuevo registro en la tabla correspondiente y a su vez lanzamos un procedimiento propio que se encarga de hacer unas comprobaciones. Este procedimiento no tiene porque afectar al usuario de la aplicacion, él debe seguir su actividad como si no se hubiera lanzado ese procedimiento.

Si no me he explicado bien, o teneis alguna duda sobre lo que pregunto hacermelo saber ok?
Muchas gracias!!
  #2 (permalink)  
Antiguo 14/03/2006, 08:20
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 1 mes
Puntos: 17
creo q podés
hacer los chequeos del usuario
con un header("location:") mandarlo a otra página q haga los otros cheuqeos, en este usar ignore_user_abort y alk principio un header("location:") (sin un exit; después)
y en otra página lo q el usuario quiera hacer
  #3 (permalink)  
Antiguo 14/03/2006, 08:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
la pregunta: ¿podemos tener diferentes hilos de ejecución con php?
Puedes usar lo que comenta Seppo .. o funciones similares como:

register_shutdown_function()
www.php.net/register_shutdown_function

Con eso al finalizar la ejecución naturar de un script .. lanzas o dejas "residente" hasta que termine ese otro poceso una función o código en general a ejecutar liberando al cliente de la espera de la respuesta de la ejecución del script (mejor dicho de la función que "registras" para trabajar bajo esta modalidad).

Por ejemplo usando:

Código PHP:
<?
function funcion(){
  
//proceso a realizar en "2° plano" (liberando al cliente que inició la ejecución).
}

// registrar y ejecutar la función mencionada.
register_shutdown_function('funcion');
?>
Realmente no sería un proceso por "hilos" .. pero es lo más que se puede hacer con PHP. (que yo sepa ..). PHP no está diseñado para ese tipo de taréas.

Cita:
caso práctico: el usuario de la aplicación web introduce un nuevo registro. Insertamos el nuevo registro en la tabla correspondiente y a su vez lanzamos un procedimiento propio que se encarga de hacer unas comprobaciones. Este procedimiento no tiene porque afectar al usuario de la aplicacion, él debe seguir su actividad como si no se hubiera lanzado ese procedimiento.
En ese caso ya que hablas de procedimientos que realizará una BBDD .. estas suelen disponer de herrramientas para tal fin como: procedimientos almacenados (Store procedure), disparadores "triggers" y cosas similares. Todo esto depende del "motor" que uses de BBDD (Mysql versiones 5 sólo disponen de "Store Procedure" pero no de "triggers" .. otros com MS SQL Server si que disponen de todo esto al igual que Oracle y otras similares ...)


Un saludo,
  #4 (permalink)  
Antiguo 14/03/2006, 08:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Por cierto, leyendo php.net ví algo referente al tema que te pueda interesar:

http://www.php.net/manual/en/control....declare.ticks

Eso sí .. OJO por qué en PHP bajo windows sólo funciona bien si usas PHP en modo CGI (y en Linux creo que también hay que ejecutarlo así para no dejar "colgado" al servidor) .. En definitiva .. parece una técnica bin peligrosa.

Un saludo,
  #5 (permalink)  
Antiguo 30/03/2006, 03:29
 
Fecha de Ingreso: mayo-2004
Mensajes: 101
Antigüedad: 19 años, 11 meses
Puntos: 0
Gracias por vuestras contestaciones. Hasta la fechano he podido ponerme con el tema que preguntaba y ahora que lo he hecho no me ha quedado del todo claro.

Seppo, lo que me propones es:
desde el archivo en el que estoy colocar un header("location:") al archivo donde hago las comprobaciones.
En este archivo, colocar un header("location:") al archivo que ha de ver el usuario , y utilizar ignore_user_abort.
¿con esto ultimo conseguire ejecutar los chequeos sin que el usuario se de cuenta?

Cluster, he estado consultando la funcion register_shutdown_function() y la verdad es que no me queda claro.
Lo he probado, pero tal vez por falta de conocimiento pues no me funciona como creo que debe hacerlo.
Pseudocódigo utilizado:
//Inserto en tabla lo que el usuario ha decidido
//Muestro mensaje de insercion ok y diferentes posibilidades de accion para el usuario en forma de enlaces.
//Llamo a la funcion que quiero que se ejecute en 2º plano. (que el usuario pulse sobre el enlace que quiera y nosotros sigamos ejecutando ciertas comprobaciones)
la llamada a la funcion la he realizado asi: register_shutdown_function("ClientesInteresados");
y la funcion ClientesInteresados hace lo siguiente (este codigo es una prueba absurda que he montado para ver si el alert tardaba en salir unos segundo, pero el caso es que primero sale el alert y despues el mensaje de validacion de la insercion junto con las alternativas en forma de enlace para el usuario):
function ClientesInteresados(){
$contador = 0;
for($i=0;$i<200000;$i++){
$contador = $contador + 1;
}
echo '<script language="JavaScript" type="text/javascript">
alert('.$contador.');
</script>';
}

espero que podais echarme una mano, o dos, tres, cuatro... muchas gracias!!
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 07:36.