Foros del Web » Programando para Internet » PHP »

¿Ejecutar tarea cada X horas aunque la web esté inactiva?

Estas en el tema de ¿Ejecutar tarea cada X horas aunque la web esté inactiva? en el foro de PHP en Foros del Web. Hola, apenas comienzo con el PHP, llevo unos días estudiándolo. Empecé porque quiero construir una web que realice una acción exactamente a las 12 am, ...
  #1 (permalink)  
Antiguo 11/05/2014, 10:46
Avatar de rbnncls  
Fecha de Ingreso: septiembre-2013
Ubicación: Chipiona, CÁDIZ
Mensajes: 20
Antigüedad: 10 años, 7 meses
Puntos: 0
Pregunta ¿Ejecutar tarea cada X horas aunque la web esté inactiva?

Hola, apenas comienzo con el PHP, llevo unos días estudiándolo.

Empecé porque quiero construir una web que realice una acción exactamente a las 12 am, u 00:00.

Mi idea es poder elegir si cada X horas, en este caso 24, se ejecute un generador de contraseñas, que dará lugar a la variable que usaré para proteger ciertas publicaciones.



Pero he visto muchas cosas, tantas que estoy hecho un lío.

Por lo que he visto las tareas solo se ejecutan cuando la web es activada, pero no se ejecutan los scripts si no hay nadie activo.

Y eso me trae de cabeza, ¿no se puede crear una tarea que se ejecute a diario aunque no se encuentre activa la página exactamente a la hora especificada?

¿Ni PHP, ni MySQL, ni Javascript?

Aparte de esto, mi idea era mantener la contraseña generada cada X tiempo en un fichero de texto, y lógicamente que ese fichero se sobreescriba cada vez que se acaba el X tiempo y se ejecuta el script generador de contraseñas. Por si queríais más detalles.

Otro detalle, he visto webs que tienen el ejemplo de lo que quiero, como [URL="http://www.miniinthebox.com/es"]Miniinthebox[/URL], que tiene un contador de 24 horas regresivo y al acabar se quitan automáticamente las ofertas, ¡eso es genial!

Ahora mismo me voy a descargar parte esa web para intentar analizarla más a fondo después, porque no tengo conexión en casa.

También pensé que podría poner un reloj con Javascript que mostrase la hora, y al llegar a 00:00 del formato 24 horas, pues devolviese el valor a PHP y este ejecutase el generador de claves.

En fin, he tenido muchas ideas y he estado mirando muchos ejemplos de códigos preconstruidos. El problema es que: Si nadie estuviese conectado a las 12 am, lógicamente no se ejecutaría el PHP y por tanto la contraseña no se cambiaría, ¿no es así?

También he estado pensando crear algo más avanzado, tengo la idea: Que teniendo en cuenta la fecha, se compruebe cuando se activa la página que no sean más de las 00:00, y si es así, que ejecute una sola vez el generador de contraseña por esas 24 horas. Pero, ¿cómo se haría eso? No se me dan bien hacer ese tipo de algoritmos, que en mayor parte son numéricos.

Acabo de pensar que para que se ejecutase una sola vez el generador de contraseñas, bastaría con que a diario generase una vez una contraseña y cada vez que se ejecute al entrar alguien en la web, compruebe que la clave que se genera no es == a la clave almacenada en el fichero de texto, y por tanto no la vuelva a sobreescribir por un día.
Pero de nuevo... Puedo intentarlo, pero no sé cómo expresarlo en código.

Sé que quizá no es este el lugar correcto para postear esta pregunta, pero pensé que se podría usar MySQL y PHP para almacenar la hora y que PHP se ejecutase u algo así.

Agradezco que lean el cacho texto que he escrito, y más agradezco opinión y comentarios. Saludos.
  #2 (permalink)  
Antiguo 11/05/2014, 11:26
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: ¿Ejecutar tarea cada X horas aunque la web esté inactiva?

En Linux, que es cual seguramente el SO que tendrá tu servidor, se suele usar cron. Ahí puedes indicar que se ejecute un archivo PHP cada veinticuatro horas —o cuando necesites.
  #3 (permalink)  
Antiguo 13/05/2014, 14:02
Avatar de rbnncls  
Fecha de Ingreso: septiembre-2013
Ubicación: Chipiona, CÁDIZ
Mensajes: 20
Antigüedad: 10 años, 7 meses
Puntos: 0
Sonrisa Respuesta: ¿Ejecutar tarea cada X horas aunque la web esté inactiva?

Muchas gracias pzin, lo que tú dices es una alternativa.

Pero ya estuve buscando una forma de hacerlo mientras estaba en casa sin conexión, y he configurado un código PHP que me vale perfectamente, ¡me puse a dar saltos de alegría al ver que el código que creé funcionaba!

Y solo llevo unos días estudiando PHP

Este es el código, la mayoría del HTML son solo estilos, el PHP es lo principal:

Código HTML:
<html>
	<head>
		<title>Xtemp</title>
	</head>
	<body style="background: rgb(175, 175, 175);">
		<div style="margin:20px auto; width:800px;height:95%;text-align:center;font-size:40px;box-shadow: 0px 10px 50px rgba(0, 0, 0, 0.5);background-color: rgb(236, 255, 249);">
		 <div style="width:100%;height:8px;"></div>
			<h2 style="font-family:Tahoma,Lucida Grande,Verdana,Arial,Sans Serif; color:#5E5E5E;">Contraseñas Xtemp</h2>
			<hr color="#AFAFAF" style="margin-top:-20px;width:99,9%;"/>
			<hr color="#ECFFF9" style="margin-top:-20px;width:99,9%;"/>
			<hr color="#AFAFAF" style="margin-top:-20px;width:99,9%;"/>
			<?php
			/* El objetivo de este código es activar una tarea a X tiempo.
			En este caso, cada X tiempo se ejecutará un generador de contraseñas como
			veremos en el ejemplo. Estas serán almacenadas en un fichero de texto...
			Contraseñas que se usarán para proteger partes en una página web mediante PHP.
			
			En este caso la idea se escriba el día, la hora o el minuto actual en un archivo,
			de modo que se condicione que se compruebe que el día, hora o minuto actual
			sea distinto al anotado en el fichero de texto.
			
			Así conseguiremos que se ejecute u no el script u tarea.
			------------------------------------------------------------
			PARA CAMBIAR ENTRE DÍAS, HORAS O MINUTOS, ES CUESTIÓN DE SUSTITUIR
			LA VARIABLE USADA POR LA QUE QUERAMOS: $dia, $hora o $minutos
			------------------------------------------------------------
			DEBEMOS TENER EN CUENTA QUE EL SCRIPT SOLO SE ACTIVARÁ CUANDO
			UN USUARIO VISITE LA PÁGINA Y POR TANTO SE ACTIVE EL PHP,
			POR ESO ESTO ES MÁS RECOMENDABLE PARA USAR A DIARIO U CADA HORA QUE MINUTOS.
			TAMBIÉN SE PUEDE MODIFICAR Y AÑADIR UN ARRAY DE HORAS U DÍAS 
			------------------------------------------------------------
			Código editado por Ruben Nicolas. */

				setlocale(LC_ALL,"spanish");
				$dia=date("d");
				$hora=date("H");
				$minutos=date("i");
				$segundos=date("s");
				$AbrirActivacion = fopen("C:\\Activacion.txt", "r");
				$LeerActivacion =fgets($AbrirActivacion,100);
				flock ($AbrirActivacion, 3);
				fclose ($AbrirActivacion);
				if ($LeerActivacion != $hora) {
					//Se actualiza el día, la hora o el minuto en el fichero de texto.
					$EscribirDate = fopen("C:\\Activacion.txt", "w+");
					fwrite($EscribirDate, $hora);
					flock ($EscribirDate, 3);
					fclose ($EscribirDate);
					
					//Acción que se ejecuta, en este caso, generador de claves.
					$str = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-/+!_";
					$clave = "";
					for($i=0; $i<20; $i++) {
						$clave .= substr($str,rand(0,41),1);
						}
					$AbriryEscribirClave = fopen("C:\\Clave.txt", "w+");
					fwrite($AbriryEscribirClave, $clave);
					flock ($AbriryEscribirClave, 3);
					fclose ($AbriryEscribirClave);
			
			//De aquí hacia abajo es código para comprobar el funcionamiento.
					echo "<span style=\"font-family:Tahoma,Lucida Grande,Verdana,Arial,Sans Serif; color:#3C3C3C;\">La clave se acaba de generar</span>";
					$leerpass = fopen("C:\\Clave.txt", "r");
					$password = fgets($leerpass);
					fclose ($leerpass);
					echo "<br><div style=\"color:#444444;border:1px solid #5E5E5E;padding:10px;margin:20px auto 10px auto;width:80%;border-radius:20px;\">".$password."</div>";
				}
				else {
					echo "<span style=\"font-family:Tahoma,Lucida Grande,Verdana,Arial,Sans Serif; color:#3C3C3C;\">La clave está actualizada</span>";
					$leerpass = fopen("C:\\Clave.txt", "r");
					$password = fgets($leerpass);
					fclose ($leerpass);
					echo "<br><div style=\"color:#444444;border:1px solid #5E5E5E;padding:10px;margin:20px auto 10px auto;width:80%;border-radius:20px;\">".$password."</div>";
				}
			?>
		</div>
	</body>
</html> 

Última edición por rbnncls; 13/05/2014 a las 14:27 Razón: Añadir información
  #4 (permalink)  
Antiguo 14/05/2014, 01:23
 
Fecha de Ingreso: abril-2013
Mensajes: 61
Antigüedad: 11 años
Puntos: 4
Respuesta: ¿Ejecutar tarea cada X horas aunque la web esté inactiva?

Hola, podrias crear un fichero .sh

fichero ejecuta.sh

Código HTML:
Ver original
  1. #!/bin/sh
  2. php /ruta/tucodigophp.php

Y luego con el CRON de linux programar para que se ejecute el fichero.sh.

Eso si las rutas de los ficheros, no creo que funcionen desde C:

Etiquetas: aunque, cada, fecha, horas, mysql, tarea, variable
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 12:56.