¿Como me aconsejais que haga esto en PHP?

Iniciado por vicmarcal, 18 Julio 2007, 15:27 PM

0 Miembros y 2 Visitantes están viendo este tema.

vicmarcal

Prometo que antes que nada he leido mas de 20 manuales de PHP, que he navegado para intentar informarme de como hacerlo...pero he encontrado muy poquita cosa.

La cuestion es que la mayoria de los manuales PHP se quedan en el envio de formularios y modificacion de la base de datos,es decir ACCION DIRECTA por parte del USUARIO.

Sin embargo se me plantea el siguiente problema:

Dispongo de una Tabla ordenada por la columna HORA.El resto de las columnas asocian a dicha HORA un cálculo simple. Esta tabla se crea por petición de los usuarios.
FECHAUSUARIOCALCULO
13:00:05victorresta(4,3)
15:00:06JUANmult(4,7)

Es decir:
Paquito ingresa en la WEB a las 11:01:03 y quiere que el servidor a las 14:01:06 le calcule la suma de 3+5.
Entonces en dicha TABLA coloca en orden a Paquito para que Juan no se cuele.
FECHAUSUARIOCALCULO
13:00:05victorresta(4,3)
14:01:06Paquitosuma(3,5)
15:00:06JUANmult(4,7)

hasta aqui...todo perfecto:

Ahora bien...supongo que necesito ALGO corriendo en el servidor continuamente de tal manera que compruebe cada segundo que la hora del servidor coincide con la celda (1,1) de la Tabla para entonces realizar el CÄLCULO correspondiente,mientras que sigue comprobando cada segundo si le toca realizar la siguiente tarea en cola. Tras realizar el CALCULO del usuario la fila primera es eliminada, pasando la segunda a la primera posicion.
(ESTO de trabajo en el background parece que los manuales de PHP lo obvian...me aconsejais alguno decente en este sentido???)

He leido algo sobre CRON...sin embargo éste está limitado a la comprobación por minuto(es imposible asignarle una tarea cada segundo). Asi pues no parece ser mi solución, y desconozco otras soluciones o como puedo poner a trabajar a un SCRIPT sin intervencion alguna de un ser humano.

Por otro lado he leido que en GENERAL tener scripts trabajando continuamente en el servidor consume muchos recursos del servidor.
Sin embargo mi script es muy especial, es cierto que está cada segundo comprobando si coincide o no la hora del servidor con la hora del CALCULO , y en caso afirmativo lanza el CALCULO,pero solo hace eso:un IF y en caso afirmativo lanza el script de la funcion correspondiente.
Mi pregunta es...como afectará al servidor???realmente lo saturara??

PD: No pretendo que me deis el código simplemente que me orienteís, no soy un "jodido lammer" ;).. pero si no entiendo algo...os lo preguntare...;)

PD2: El CALCULO no se puede realizar antes de la hora prevista, pues dicho CALCULO usará una variable cuyo valor no se conoce hasta que sean exactamente las 13:00:05(para el caso de Victor)...(como comprendereís las funciones que he puesto en la columna CALCULO son meros ejemplos)(Mas especificmante son funciones que necesitan el valor de un sensor de presión atmosférica en dicho instante de tiempo)





Sanjuu

No se si te he entendido bien pero creo que lo que tu pretendes hacer no es desde PHP.

¿Has leido sobre disparadores de bases de datos?

Código (php) [Seleccionar]

if (pregunta->buscador()==NULL)
     pregunta->formular_pregunta();

alone-in-the-chat

Usando disparadores podrias pero eso mismo(el resultado del calculo) debes de presentarlo en tu aplicacion imagino o el resultado del calculo debe guardarse en la base de datos?
Si es asi , (guardar el resultado en la bd sin necesidad de mostrarlo en la web )como te dijo Sanjuu la solucion podria estar en los disparadores .

Si deseas hacerlo desde PHP como tu mismo colocaste usar un cron seria la mejor solucion , y de que tener un script corriendo cada momento consume recursos lo hace pero si es absolutamente indispensable , ahora podrias hacer que el cron se ejecute cada hora y que realize los calculos cuya hora sea menor al momento en que se ejecuta .

Una pregunta , el usuario como accede al resultado de su calculo??
Reingresa al sitio y puede verlo (en ese caso el resultado debe guardarse en algun lado imagino) , o tiene que esperar en linea hasta que se ejecute.

Saludos.


Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b

дٳŦ٭

Te vas a leer 20 más  :xD

Con PHP no es posible, ni con MySQL o Js  :P. Te recomendaría leer sobre FireBird y los 'stored procedure'  ;).

Ahhh y sobre el Pear pa conectar desde PHP.

Suerte


Con sangre andaluza :)


vicmarcal

#4
Muchas gracias a todos por las PRIMERAS respuestas...jajajaj...me parece que he debido de dejar una parte del PHP por aprender y descubrir..me encanta.....;)

Empiezo a contestar a todos(leed todos los comentarios a cada uno please..;)):

SANJUU:

No conocía los disparadores,desde luego me van a resultar tremendamente útiles para otra parte de mi aplicación ( es el control via Web de una planta: con parámetros de presión,temperatura..etc.. y modificación de las acciones de control por parte de los usuarios para mantenerla a unos niveles de seguridad óptimos)

ALONE-IN-THE-CHAT:

Efectivamente el cálculo ha de ser visto por el usuario, es decir tras realizarse el CÁLCULO debe de ocurrir 2 cosas:
1)Que el resultado sea guardado en una base de datos de supervisión(a la cual solo tiene permiso de acceso el ADMIN para chekear que las acciones de los usuarios en el sistema son adecuadas, y es invisible para el resto de usuarios)
2)Devolver el resultado del CALCULO a la "bandeja de entrada" del usuario informándole del resultado. Cada usuario tiene su propia bandeja de entrada ;) donde se le informa de los resultados de dichos CALCULOS.

La cuestion 1) la pensaba resolver al ejecutar el CALCULO(la ultima linea de la operación sería la copia de la accion a la TABLA de supervisión)
La cuestion 2) la pensaba resolver cuando el usuario LOGASE en el main, es decir: al logarse se ejecutaría mensajes.php que colocaría el resultado de manera visual en la bandeja de entrada del usuario(obteniendo los datos de la TABLA de supervisión o una intermedia).

(No sé que os parecerá estos métodos. Admito opiniones/criticas destructivas/consejos ;))

Había pensado en la solución que me has propuesto(de ejecucion a cada hora mediante el cron) sin embargo la funcion que debe ejecutarse NECESITA el VALOR EXACTO de varios parámetros de la hora impuesta por el usuario.  es por eso que no me sirve del todo tu idea...:(

ING_AMC:

Me acabas de soltar tal cantidad de PALABROS (FIREBIRD,store procedure...) que estoy investigando que  diantres son...para poder contestarte con propiedad ;)jajaja..si pudieses minimamente explicar para que me serviria cada cosa...un pokitin para ir encauzando...estaría encantado de saber por donde empezar a leer esos 20...o 40...(es verano y aun tengo tiempo ;))

EDITADO
He leido algo sobre los store procedures y lo que hacen, el siguiente pdf es de lo mas completo que he visto(hasta el momento)
http://www.firebird.com.mx/imagenes/descargas/procedimientos_almacenados.pdf
Y aunque hace cosas muy monas, aún no he encontrado la forma de "prograrmar al servidor para que cada segundo realice la tarea de comprobar si es la hora exacta para realizar la tarea". Una vez que lo hyaya conseguido programar entonces es cuando veo la utilidad de usar store procedures...o es que se me ha pasado algo por alto???:(

MUchas gracias a todos...


Espero vuestras aportaciones....

Muchisimas gracias por todo

alone-in-the-chat

X) es que los procedimientos almacenados no tienen esa funcionalidad , son funciones que ejecutan acciones dentro de la bd pero deben ser invocadas , los triggers son tambien son funciones que se ejecutan en la bd pero estas (tal y como las uso io ) se ejecutan cada vez que se ejecuta una accion  ( ON INSERT , ON UPDATE , ON DELETE ) al menos asi es en MSSQL  no eh usado firebird , lo que necesitas es un script (no importa el lenguaje perl , php , etc ) que se ejecute cada segundo , para eso la solucion mas rapida seria un cron como ya señalaste (asumes la carga del servidor) , ahora si alguien se le ocurre una solucion mejor, seria bueno que la exponga  ;D por que estoy a punto de verme en el mismo caso , de paso  me hechan una mano a mi tb  :D

Saludos
Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b

vicmarcal

Ok....entonces acepto cualquier script en PERL...vamos ampliando el rango...de PHP a PERL...;)...alguna pista de como hacer en PERL que el servidor ejecute un php cada segundo????

La cuestion es que el servidor bajo el que lo tengo que poner solo admite MYSQL,PHP,CGI,PERL y siendo mu wena gente me dejan tener activo un CRON...(no he encontrado ningun servidor gratuito con más opciones...).

No sé muy bien como trabajan estos servidores gratuitos(hasta ahora mi PC era mi server ;) y se dejaba hacer lo que yo quisiera), pero logicamente ni de coña me dejan trastear desde consola(a no ser que pague un server dedicado claro,y no sé hasta donde tendré permisos realmente...)

Para aquellos que quieran saber un poco mas de como ejecutar Tareas cada segundo he encontrado algo que os podria servir...se llama nnCron:

Éste sería el ejemplo de realizar 6 iteracion con 10 segundos entre cada iteracion:
(Supongo que si pusiese 999999999999999999999999999999999999999 iteraciones  con tiempo 1 segundo entre cada iteración la cosa me funcionaría,pero no creo que pueda instalar el nnCron..)

Citar#( test_10sec
    Action:
    \ defining the loop:
    \ 6 iterations with 10 seconds pause between each iteration
    6 0 DO
            START-APP: your_app.exe
            PAUSE: 10000
        LOOP
    )#

http://www.nncron.ru/forums/viewtopic.php?p=2429

Esto es lo más que he podido encontrar...:(