entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

-1voto

programar eventos con fechas

hola chic@s en esta ocasion necesito apoyo para programar con fechas en practica deseo que se imprima un mensaje despues que pasen algunos minutos de la hora actual por ej en mi siguiente codigo con la funcion date obtengo la fecha con la hora y los minutos luego declaro una variable que asigno la misma fecha pero con una hora distinta para que cuando llege a tal hora se ejecuta mi sentencia.

$time = date("d/m/Y h i");  // ej 24.02.2017 15.40 
$punto = date("d/m/Y" 15.50); // despues de 10 minutos se debe imprimir el mensaje
if($time == $punto ) {echo "punto";}

nota: el codigo que muestro fue el primero que se me ocurrio lo he probado pero no es funcional

2votos

magarzon comentado

Se imprima un mensaje... ¿dónde? Web? Consola? Con qué propósito?

Por otra parte, ¿esperabas que la variable time se actualizara sola?

0voto

steven comentado

estimado quiero solo probar si es posible hacerlo el proposito todavia no lo tengo claro y la variable time no se que tiene ver si estoy tratando con date.
por este motivo al final de mi pregunta señalo que soy un dummie con las fechas cual seria tu ingenieria para llegar hacerlo

1 Respuesta

1voto

magarzon Puntos30650

No sé si esto es lo que buscas.

Para empezar, la función date en PHP solo te devuelve una fecha determinada con el formato que le hayas especificado. Lo que te devuelve es una cadena, así que si pones dos fechas distintas en $time y en $punto, no esperes que estas dos cadenas sean iguales en algún momento del tiempo, porque son cadenas, y no van a cambiar por sí solas.

Si lo que quieres es "pausar" tu script y que se despierte en una fecha determinada, por ejemplo 10 minutos más tarde, lo que tienes que hacer es esto:

time_sleep_until(time()+600);
echo 'Despierta, han pasado 10 minutos';

La función time_sleep_until admite un tiempo en Unix time, por eso obtenemos con time() el tiempo actual en Unix time y le sumamos 600 segundos (10 minutos).
Al cabo de 10 minutos se ejecutará el echo.
Pero tienes que tener en cuenta que tu script no va a hacer nada más en esos 10 minutos.

Si lo que quieres es que tu script haga otras cosas mientras está esperando a que pasen esos 10 minutos, ya te tienes que liarte con threads (que en PHP no es lo más fácil del mundo), multiprocesos o arquitecturas paralelas usando colas por ejemplo, dependiendo mucho de lo que quieras hacer (por eso te preguntaba qué querías hacer)

1voto

carlossevi comentado

¿A qué te refieres con "emular"?

Dejar un hilo en ejecución continua hasta que llegue el momento oportuno es ineficiente, además de que cualquier instalación de PHP debería estar configurada para poner un límite y matar los scripts que se ejecutan durante demasiado tiempo.

Suponiendo que incluso pueda hacerse, ¿Quien ejecutaría ese supuesto hilo que va a estar en sleep? Igualmente lo tiene que ejecutar algún agente.

No intentes reinventar la rueda ni hacer sobreingeniería. Ese problema ya está solucionado mediante una línea del cron en Linux o una tarea programada en Windows. Es un elemento más que tendrás que configurar en tu instalación, pero no estamos hablando de dependencias porque es parte del sistema operativo.

Reduciendo al absurdo tu argumento, si no quieres depender de nada ya puedes ir empezando a desarrollar un sistema operativo ad hoc para tu aplicación.

0voto

steven comentado

con emular me refiero a la accion de ejecutar un script periodicamente como lo hace crontab de linux pero en windows con el task scheduler. esto supondria un procedmiento con los siguientes pasos

  1. iniciar el xamp a tal hora 2.correr el script .3 cerrar el xamp .4 volver a repetir el proceso el dia siguiente
    de otro modo se podria utilizar un script en bat o python para hacer lo mismo
    respecto al agente no lo habia tomado en cuenta creo que se resolveria configurando mi script para que se repetiera segun un patron establecido
    por ejemplo si quiero que todos los dias a las 5am visite una pagina y extraiga el titulo de la pagina seria cuestion de usar la funcion sleep y pasarle como parametro un tipo de dato mayor que int para que soporte todos los digitos luego cuando se cumpla, que espere otras 24 para volver a inciarlo.

por ultima cosa hay manera de saber si mi servidor soporta el crontab y cuales serian los posibles datos a tomar en cuenta antes de seguir
adicionalmente si mi servidor lo soporta puedo correr cualquier tipo de aplicacion indiferentemente del lenguaje php, python y js

1voto

carlossevi comentado

No tiene sentido que mantengas un script funcionando durante 24 horas para que esté 23 horas y 59 minutos "dormido". Además, si falla no volverá a ejecutarse mágicamente por si mismo.

Si quieres que una tarea suceda a las 5am, programa la tarea en el lenguaje que te dé la gana (VBScript, bat, Python, bash, PHP, Powershell...) y configura el programador de tareas del sistema para ejecutarla.

Si quieres que sea multiplataforma, dedícate a que el script funcione en todas las plataformas y no te preocupes por la nimiedad de que el programador de tareas del sistema va a ser distinto en ambas plataformas.

0voto

steven comentado

ok concuerdo contigo esto supone que seria una perdida en rendimiento pero que pasaria si lo configuro para que se inicie cada vez que sucede un evento es decir si por ej alguien visita la pagina se inicie y luego se reinicie a la proxima visita. de otra manera se podria mandar una orden remotamente para que se inicie el temporizador es decir si a la medianoche envio una orden a mi servidor para que empieze a contar las horas y cuando llege a las 5 empieze a correr el script y cuando termine que mate el proceso para no consumir recursos.
esto resolveria el problema de eficiencia que mencionas en las primeras lineas

2votos

carlossevi comentado

Se me ocurren muchísimas pegas al planteamiento que haces, pero es que además no tiene ninguna ventaja. El único motivo para hacerlo sería tu cabezonería. Hazlo como quieras, aquí solo te aconsejamos sobre cómo se hacen las cosas en el mundo real de los proyectos que funcionan.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta