Foros del Web » Programando para Internet » PHP »

ejecutar una funcion pasados unos segunos

Estas en el tema de ejecutar una funcion pasados unos segunos en el foro de PHP en Foros del Web. Hola amigos, una pregunta: ¿Existe una funcion que haga lo mismo que settimeout (de javascript) per o para php? En caso de que no, como ...
  #1 (permalink)  
Antiguo 06/05/2016, 10:10
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
ejecutar una funcion pasados unos segunos

Hola amigos, una pregunta:

¿Existe una funcion que haga lo mismo que settimeout (de javascript) per o para php?


En caso de que no, como se puede ejecutar una funcion pasado x segundos?

he usado sleep pero claro se pausa todo el documento y yo necesito que se pause solo una funcion no todas las funciones del documento.


En caso de que solo se pudiera hacer con javacript/jquery, ¿Que pasaria si el navegador del cliente tiene desconectada javascript, la funcion que utilizara este script no se ejecutaria nunca , ya que al tener desactivado javascript no podria ejecutarse, es asi?


gracias de antemano.
  #2 (permalink)  
Antiguo 06/05/2016, 11:13
 
Fecha de Ingreso: octubre-2009
Mensajes: 305
Antigüedad: 14 años, 6 meses
Puntos: 29
Respuesta: ejecutar una funcion pasados unos segunos

recuerda que PHP es una aplicación web, se ejecuta cuando el cliente envía peticiones.

si lo que tu quieres es que se ejecute un código cada x segundos lo ideal es usar javascript y en dado caso enviar una petición AJAX al servidor con PHP, pero si, necesitas javascript.

otra idea, si es que no puedes usar javascript (lo cual hoy en día es absurdo, pero bueno) es que uses un iframe y le coloques al HTML un header timeout que refresque la pagina cada x segundos, se que existe pero no lo recuerdo
  #3 (permalink)  
Antiguo 06/05/2016, 13:46
 
Fecha de Ingreso: octubre-2014
Mensajes: 63
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: ejecutar una funcion pasados unos segunos

Ejecuta un ajax cada determinado tiempo según el lapso en que quieras que se ejecute tu script!
  #4 (permalink)  
Antiguo 07/05/2016, 11:06
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
Respuesta: ejecutar una funcion pasados unos segunos

Una cosa:

Lo que voy buscando es que un usuario que se me dé de alta en una fecha concreta, pasados digamos 30 días, se le ejecute un mensaje en su respectivo perfil con el mensaje, por ejemplo, que diga: "han pasado 30 días desde que te diste de alta."


Pero claro no se por donde cogerlo, ya que con php se mostrar la "fecha de alta" del usuario.

Tambien se mostrar el "tiempo de plazo" tanto en segundos, como convertir esos segundos en una fecha convencional que se refiera como digo al tiempo de plazo.

Y tambien se mostrar la "fecha de plazo", que seria la "fecha de alta" + "tiempo de plazo"

Pero claro, lo unico que se me ocurre es un ilogico if que diga:
Código PHP:
Ver original
  1. if(fecha_plazo < plazo)
  2.  {
  3. echo "Han pasado 30 dias desde que te diste de alta"
  4. }

Pero claro, el problema es que $fecha_plazo nunca va a ir para atras, asi que nunca va a ser menor que "plazo", asi que nunca se me va a mostrar el mensaje

Help

Un poco de seudo codigo para ver como enfocar el problema lo agradeceria mucho.
  #5 (permalink)  
Antiguo 07/05/2016, 13:09
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: ejecutar una funcion pasados unos segunos

prueba asi:
Código PHP:
Ver original
  1. $fecha_registro = date_create('2016-05-01');//fecha en que se registro el cliente
  2. $fecha_actual   = date_create(date("Y-m-d"));//fecha de comparación
  3. $interval       = date_diff($fecha_registro, $fecha_actual);//sacamos la diferencia
  4.  
  5. echo "Han pasado ".$interval->format('%a días'). "desde su registro";//mostramos la diferencia

ya con js podria verificar a traves de ajax esto en un php, o a traves de un cron, hay muchas maneras de hacer lo que buscas
__________________
[email protected]
HITCEL
  #6 (permalink)  
Antiguo 09/05/2016, 08:59
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
Respuesta: ejecutar una funcion pasados unos segunos

Muchas gracias xfxstudios, me sirvio de mucho el codigo que me aconsejaste.

He adaptado y añadido algo de codigo al que me has aconsejado.

Solo necesito una ultima ayuda y es que venga reflejado la hora de registro del usuario y restarle la de la fecha y hora actuales.

Mira lo he personalizado asi:

Código PHP:
Ver original
  1. function los_dias_transcurridos($fecha_registro)
  2.    
  3.         {
  4.             $fecha_registro = date_create($fecha_registro);//fecha registro el cliente
  5.             $fecha_actual   = date_create(date("Y-m-d"));//fecha de actual
  6.             $diferencia     = date_diff($fecha_registro, $fecha_actual);//diferencia entre fecha registro y la actual
  7.            
  8.             return $diferencia->format('%a');
  9.         }
  10.    
  11.        
  12.    
  13.     function crono($los_dias_transcurridos)
  14.    
  15.         {
  16.             if($los_dias_transcurridos < 30)
  17.            
  18.                 {  
  19.                     echo "Han pasado " . (30-$los_dias_transcurridos) . " días desde su registro <br/>";           
  20.                 }
  21.                
  22.                 else
  23.                
  24.                 {      
  25.                     echo "Han pasado mas de 30 días de plazo, game over.";         
  26.                 }
  27.         }
  28.        
  29.        
  30.        
  31.     $fecha_registro = '2016-05-01';
  32.    
  33.     $los_dias_transcurridos = los_dias_transcurridos($fecha_registro);
  34. echo $los_dias_transcurridos . "<br/>";    
  35.     crono($los_dias_transcurridos);
  #7 (permalink)  
Antiguo 09/05/2016, 10:25
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: ejecutar una funcion pasados unos segunos

Para la fecha actual con hora minutos y segundos
Código PHP:
Ver original
  1. $fecha_actual   = date_create(date("Y-m-d H:i:s"));//fecha de actual

Para formatear el resultado
Código PHP:
Ver original
  1. return $diferencia->format('%a días %H horas %I minutos %S segundos ');

Aun que deberás adaptar una de las 2 funciones para que funcionen conjuntamente.
__________________
Unset($vida['malRollo']);
  #8 (permalink)  
Antiguo 09/05/2016, 17:08
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: ejecutar una funcion pasados unos segunos

Creo que el cron es el indicado para esto. consulta tu base de datos todos los días a las 00:00 por ejemplo y verifica todos los usuarios que estén dados de alta tras un determinado periodo y creále un nuevo mensaje en su perfil.

La otra opción, cada vez que el usuario se loguee pues cuenta el tiempo que lleva de alta (fecha de registro contra fecha actual) y si da 30, pues agrégale el mensaje al perfil.
  #9 (permalink)  
Antiguo 13/05/2016, 04:32
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
Respuesta: ejecutar una funcion pasados unos segunos

Ok creo que he entendido lo de la hora con tus indicaciones. Pero antes de implementar lo de la hora, estoy pasando el codigo a orientacion a objetos.

El asunto es que me funciona bien la clase y el metodo. pero cuando le meto el constructor no va.

Y no se por que.

Código PHP:
Ver original
  1. function __contruct($fecha_registro)
  2.        
  3.             {
  4.                 $this->fecha_registro = $fecha_registro;
  5.             }
  6.                
  7.        
  8.        
  9.         function dias_transcurridos()
  10.        
  11.             {
  12.                 $fecha_registro = date_create($this->fecha_registro);//fecha registro el cliente
  13.                 $fecha_actual   = date_create(date("Y-m-d"));//fecha de actual
  14.                 $diferencia     = date_diff($this->fecha_registro, $fecha_actual);//diferencia entre fecha registro y la actual
  15.                
  16.                 return $diferencia->format('%a');
  17.             }
  18.  
  19. }
  #10 (permalink)  
Antiguo 13/05/2016, 07:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: ejecutar una funcion pasados unos segunos

Cita:
pero cuando le meto el constructor no va.
¿__contruct?

Creo que te comiste una letra "s".

Siempre debes leer bien todo lo que haces, de otra forma no se puede.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 13/05/2016, 08:25
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 12 años
Puntos: 5
Respuesta: ejecutar una funcion pasados unos segunos

Bueno si tienes razón, jeje, pero sigue sin funcionar mira:

Código PHP:
Ver original
  1. class clase_plazo_borrado_perfil
  2.  
  3.     {
  4.         function __construct($fecha_registro, $dias_transcurridos)
  5.        
  6.             {
  7.                 $this->fecha_registro = $fecha_registro;
  8.                 $this->dias_transcurridos = $dias_transcurridos;   
  9.             }
  10.                
  11.        
  12.        
  13.         function dias_transcurridos()
  14.        
  15.             {
  16.                 $fecha_registro = date_create($this->fecha_registro);//fecha registro el cliente
  17.                 $fecha_actual   = date_create(date("Y-m-d"));//fecha de actual
  18.                 $diferencia     = date_diff($this->fecha_registro, $fecha_actual);//diferencia entre fecha registro y la actual
  19.                
  20.                 return $diferencia->format('%a');
  21.             }
  22.  
  23. }

Me dice:

Warning: Missing argument 1 for clase_plazo_borrado_perfil::__construct(),

Notice: Undefined variable: fecha_registro

Warning: date_diff() expects parameter 1 to be DateTimeInterface, null given in

Fatal error: Call to a member function format() on boolean in
  #12 (permalink)  
Antiguo 13/05/2016, 08:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: ejecutar una funcion pasados unos segunos

¿Pues cómo es que inicializas la clase?

Porque tu clase espera dos argumentos en el constructor, y el error te indica que sólo le estas pasando uno...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 20/05/2016, 13:27
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: ejecutar una funcion pasados unos segunos

deberas usar un servicio que te dispare el script php, yo lo hice con un servicio de windows. en c++

Etiquetas: funcion, unos
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 00:04.