[PHP]: Cronjob Simulator


Salve a tutti,

oggi volevo parlarvi di un comando non sempre presente sui nostri piani di hosting, ovvero il CronTab!

Ora supponendo che abbiate staccato gli occhi dalle due signorine programmatrici, vi starete chiedendo: (chi già lo sa può continuare a guardare la foto! 😛 ) Ma cos’è CronTab?

Citando Wikipedia:


Nei sistemi operativi Unix e Unix-like, il comando [code]]czo3OlwiY3JvbnRhYlwiO3tbJiomXX0=[[/code] consente lo scheduling di comandi, ovvero consente di registrarli presso il sistema affinché siano poi mandati in esecuzione periodicamente. Lo stesso nome “crontab” si riferisce anche ai file utilizzati dal comando crontab come “registri” dei comandi “schedulati”.

Generalmente, [code]]czo3OlwiY3JvbnRhYlwiO3tbJiomXX0=[[/code] usa un demone, chiamato [code]]czo1OlwiY3JvbmRcIjt7WyYqJl19[[/code], che è costantemente in esecuzione in background[code]]czo3OlwiY3JvbnRhYlwiO3tbJiomXX0=[[/code] viene chiamato cronjob

In Cosa può essere utile un comando del genere con PHP?

Ad esempio quando volete che una volta al giorno, venga controllato se ci sono utenti del vostro sito in php, che si sono iscritti, ma non hanno confermato la richiesta…

Oppure ad esempio, se dobbiamo eliminare dal server dei file molto vecchi ad intervalli di tempo regolari.

Però cosa fare se il nostro piano di Hosting non ci permette di aver il comando CronTab?

Per aggirare, almeno in parte, il problema… ho creato questa classe in php che ci permette di eseguire degli script php, ad intervalli regolari definiti in minuti al momento della chiamata.

La Classe e le sue Funzioni:

Cronjob Simulator, permette di eseguire un file php ad intervalli regolari definiti in minuti nella chiamata alla funzione. Il funzionamento è semplicissimo:

Vengono usate 2 funzioni di PHP che permettono di far andare i comandi anche se l’utente ha chiuso il browser o annullato la richiesta, e un ciclo continuo che eseguirà i compiti assegnati.

Veniamo al Codice della Classe: (PHP) libs/cronjob.class.inc.php

< ?php

/***********************************************
 *					 CronJob Simulator	 			  *
 *							   by							  *
 *						    Stefano V.					  *
 *					   info@svsoftwares.org			  *
 ***********************************************/

 class CronjobSimulator {
 
	// true continua, false ferma il ciclo
	private $flag = true;
	
	// avvia il cron e setta l'intervallo
	public function cronFile($file, $intervallo = 1)
	{
		// ignora se l'utente annulla
		ignore_user_abort(); 
		// lo script va all'infinito
		set_time_limit(0); 
		
		// intervallo di tempo ogni quanto far eseguire il file
		$interval = 60 * $intervallo;
		
		// legge i log e dedide se avviare il ciclo
		if(!$this->checkLoop($file))
		{
			
			// cicla
			do
			{
				
				// se esiste il file da includere
				if(file_exists($file))
				{
					// setta la flag a true
					$this->flag = true;
					
					// include il file da eseguire
					include($file);
					
					// scrive il log
					$this->creaLog($file, $intervallo);
				}
				else
				{
					// setta la flag a false.
					$this->flag = false;
				}
				
				// ferma intervallo
				sleep($interval);
			}
			while($this->flag);
			
		}
		else
		{
			return false;
		}
	}
	
	private function creaLog($file, $intervallo)
	{
		
		// apro il log
		$fl = fopen("cronjob.log", "w");
		
		// scrivo il log
		fwrite($fl, "Classe CronJob Simulator by S.V Design <info @sv-design.org>\r\n");
		fwrite($fl, "Stato: Cronfile eseguito.\r\n");
		fwrite($fl, "Intervallo: $intervallo minuti\r\n");
		fwrite($fl, "File eseguito: $file.\r\n");
		fwrite($fl, "Timestamp attuale: ".mktime()."\r\n");
		fwrite($fl, "Ora Attuale: ".date("H.i")."\r\n");
		
		// chiude il file
		fclose($fl);
	
	}
	
	private function checkLoop($file)
	{
		
		// se esiste il file da eseguire
		if(file_exists($file))
		{
			
			// se esiste il log
			if(file_exists("cronjob.log"))
			{
			
				// legge le righe
				$righe = file("cronjob.log");
				
				// intervallo
				$tempo = $righe[2];
				
				// orario
				$ora = $righe[4];
				
				// se c'è un numero nell'intervallo
				if(eregi("[0-9]+", $tempo, $reg))
				{
					
					// lo legge
					$tempo = $reg[0];
					
					// se c'è un numero nell'ora
					if(eregi("[0-9]+", $ora, $req))
					{
						
						// lo legge
						$ora = $req[0];
						
						// ora attuale
						$adesso = mktime();
						
						// differenza tra l'ultima esecuzione e adesso
						$differenza = $adesso - $ora;
						
						// minuti equivalenti alla differenza
						$minuti = date("i", $differenza);
						
						if($minuti < = $tempo)
						{
							// true = blocca ciclo
							return true;
						}
						else
						{
							// false = avvio ciclo
							return false;
						}
					}
					else
					{
						return false;
					}
				}
				else
				{
					return false;
				}
			}
			else
			{
				return false;
			}
		}
		else
		{
			return true;
		}
	}
 
 }
 
?>

Ora creiamo uno script (sempre php) che conterrà i dati da eseguire periodicamente dal Crontab Simulato.

Nell’esempio riportato il file è chiamato “example_script.php” e creerà sul server un file vuoto chiamato “cron_” seguito dal timestamp.

	$fp = fopen("cron_".mktime().".txt", "w");
	
	fwrite($fp, " ");
	
	fclose($fp);

Il passo successivo è quello di creare un file dal quale richiameremo la classe e lo script.

Il questo esempio il file si chiama “esempio.php” ed esegue la classe ogni minuto:

	include 'libs/cronjob.class.inc.php';
	
	$cron = new CronjobSimulator();
	
	if( !$cron->cronFile("example_script.php", 1) )
		print("Ciclo in esecuzione o file inesistente!");

Come possiamo vedere, richiamo la funzione cronFile della classe, passando come parametro lo script che contiene i dati da eseguire, e l’intervallo in minuti tra un’esecuzione e l’altra.

Che succede se avvio 2 volte il file esempio? Si creano 2 processi sul server?

No, assolutamente.

La classe ha al suo interno una funzione che scrive un log (“cronjob.log“) nel quale memorizza, l’ultima esecuzione, e l’intervallo… e da questi ne deduce se il ciclo è ancora in esecuzione.

Finchè il ciclo sarà in esecuzione, non sarà inviata una seconda richiesta al server.

Come fermo il Ciclo?

Purtroppo il ciclo non si può fermare perchè rimane in memoria al server, finchè il nostro provider non decide per qualche motivo di riavviare Apache.

In alternativa, basterà cancellare lo script da eseguire, in questo modo la classe controllerà che lo script non esiste più ed il ciclo verrà fermato!

Limitazioni?

Si, purtroppo. Siccome il file di log è chiamato cronjob.log, non si possono avere più comandi in una stessa cartella, altrimenti salterebbe il meccanismo di controllo in caso di ri-esecuzione dello script.

Nel caso volessimo eseguire più comandi ad intervalli differenti, dovremo per forza spostarci in un altra cartella.

Questa limitazione verrà corretta nella prossima versione che rilascerò non appena avrò tempo! 😉

File dell’esempio da scaricare: DOWNLOAD CRONJOB SIMULATOR



47 Commenti

  1. Mark116 ha detto:

    Quindi volendo posso banalmente inserire questo:

    if( !$cron->cronFile(“example_script.php”, 1) )
    {}

  2. StefanoV ha detto:

    Questo blocco condizionale determina un azione nel caso il ciclo fosse gia avviato.
    Ad esempio, sappiamo bene che ognitanto il server può cascare e i processi cosi vengono stoppati, o semplicemente viene impostato dal provider un limite di tempo dopo il quale il processo sul server dev’essere stoppato…

    Come soluzione potremmo inserire il richiamo al file da ciclare nella nostra index.php .. in modo che ogni visitatore ci avvii il ciclo…

    Questo controllo serve apposta a far si che se il ciclo è gia avviato, nn si crea una sovrapposizione che impalla il server, ma semplicemente dice il processo è gia in esecuzione …

  3. Mark116 ha detto:

    Ciao scusa la domanda, non ho capito bene cosa fa questo if:

    if( !$cron->cronFile(“example_script.php”, 1) )
    print(“Ciclo in esecuzione o file inesistente!”);

  4. StefanoV ha detto:

    Ciao, no purtroppo no… appena ho tempo la riscrivo! 😉

  5. Mark116 ha detto:

    Ciao, esiste una versione più aggiornata di questo script?

  6. stefanov89 ha detto:

    Questo non dipende dalla classe per simulare il cronjob … il fatto che lo zip è creato significa che la funzione viene eseguita, forse hai sbagliato luogo in cui postare.
    Comunque è un problema del codice per effettuare il backup del database…

  7. davide ha detto:

    Ciao, anzitutto complimenti per il lavoro. Poi ti volevo chiedere un chiarimento: sono su webserver locale con mamp. Inserendo tutto correttamente creo lo zip con il backup, però sembra non contenere nessun dato. Cioè, si presenta come uno zip da 4KB. Però quando vado ad estrarlo, ho un file .sql datato 1970 e Zero KB.

    Dove sbaglio? Sai aiutarmi? Grazie ciao

  8. stefanov89 ha detto:

    E' colpa dell'hosting purtroppo, in locale il php.ini è impostato con il limite di interruzione su infinito, in un hosting è raro che si possa fare…

  9. Roberto ha detto:

    Ciao,
    in effetti era la versione di php che dava problemi.
    🙂
    in ogni caso ora sto riscontrando un altro problema e non so esattamente da cosa possa dipendere:
    ho avviato il ciclo on-line, fatto prove su prove tutto sembrava andar bene.
    Oggi sono rientrato dal week-end ed il ciclo è fermo.
    Non ho toccato niente tant'è vero che il ciclo l'ho lasciato "attivo" quando sono andato via.

    Ho provato a riavviarlo solo che a differenza delle altre volte che ci impiagava tanto tempo e funzionava, questa volta ci mette un secondo, mi da il messaggio scritto in "echo" mail ciclo non parte.

    Da premettere che avevo impostato, prima di andar via l'esecuzione del ciclo ogni 60 minuti.

    In locale funziona tutto bene.

    Non riesco proprio a capire questa cosa, da cosa possa dipendere… Prima di chiamare quelli del server vorrei avere un attimino le idee più chiare!
    Help me plz! 🙂

    Grazie in anticipo!
    Roberto

  10. StefanoV ha detto:

    Può darsi di si, però mi sembra strano che ti dia errore alla linea 1, visto che su quella linea ci dovrebbe stare solo l’apertura del tag php…

  11. Roberto ha detto:

    Ciao,
    ti ringrazio innanzitutto per la celere risposta.

    Dunque la versione del PHP online è questa: 5.0.2.2635
    Mentre la versione che ho in locale è questa: 5.2.6

    dici che il problema possa essere questo?

    Grazie ancora.
    Roberto.

  12. StefanoV ha detto:

    Ciao Roberto,
    siccome sei sicuro che in locale tutto funziona per il meglio, controlla che la versione di php in remoto sia la stessa di quella in locale, e controlla gli errori di sintassi (anche se non dovrebbero essercene se in locale funziona)

  13. Roberto ha detto:

    Ciao a tutti.
    ho provato lo script in locale e fino ad ora non ho avuto nessun problema.

    Oggi, ho eseguito l’upload e quando raggiungo la pagina dov’è inclusa la classe, prima ancora di richiamarla, mi da il seguente errore:

    Parse error: syntax error, unexpected T_CLASS in /home…/includes/cronjob.class.inc.php on line 1

    Da cosa potrebbe dipendere l’errore?
    Grazie in anticipo

  14. dottwatson ha detto:

    2 osservazioni:

    alla riga 041 io usere file_get_contents($file) per 3 ragioni:

    1) utilizzabile per interrogare files in altri hosting,

    2) posso usare dei parametri in get,

    3) se include il file lo scope di tutte le variabili dichiarate sarà all' interno della classe… con file get_contents invece lo scope delle variabili rimane globale

    Mirko

  15. dottwatson ha detto:

    inotre metterei un callback arbitrario sull’ esecuzione del file schedulato, in maniera tale che possa far seguire ad un determinato evento , un’ azione arbitraria mia…

    tipo

    $istance->addEvent(‘miofile.php’,’send_mail’);

    e la funzione send_mail
    function send_mail(){
    …code…
    }
    Mirko

  16. StefanoV ha detto:

    Ciao michelangelo,
    installando EasyPHP hai praticamente installato il webserver APACHE, quindi la classe funziona perfettamente senza necessità di installare una distro di linux 😉

  17. Michelangelo ha detto:

    Io ho installato in locale Easy PHP per simulare un server sul mio pc (winXP) e fare prove in locale con Wp e Joomla: pensi che lo script possa funzionare in qualche modo anche in locale?
    A spanne direi di no, perchè suppongo necessiti di un ambiernte linux: io potrei avercelo virtualizzato sul mio pc (virtualbox) con un paio di distro a scelta(Slax, DSL, Slackware, Puppy);
    se facessi eseguire cronjob al Linux (mi serve per un plugin Wp da eseguire con frequenza programmata) potreebbe funzionare???
    Grazie per l’attenzione,
    Michelangelo

  18. StefanoV ha detto:

    Fagiano non credo sia un utilizzo proprio della classe, perchè per tenere traccia degli utenti online un modo meno dispendioso di risorse potrebbe essere:

    Salvare l'id di sessione al login dell'utente nel database insieme al timestamp, e ad ogni pagina che visita l'utente, ad inizio pagina metti un codice ke aggiorna quell'id di sessione spostando il timestamp di 5 minuti ad esempio, dopodiche un codice ke cancella tutte le sessioni del database dove il timestamp attuale, meno quello di creazione (o aggiornamento) è maggiore di 5 minuti x esempio…

    In questo modo x contare gli utenti online ti basta fare un COUNT(*) della tabella delle sessioni, e se oltre all'id sessione e data, segni anche il nome utente, puoi avere anche la lista degli utenti online ed impedire il login se è gia stato effettuato da un altro pc cn lo stesso account…

    Come vedi il cronjob non serve in questo caso, al massimo potresti applicarlo per la cancellazione delle sessioni ogni 5 minuti…

  19. fagiano ha detto:

    Ciao, volevo capire una cosa… ho un sito all'interno delle cui pagine mostro a video il numero di utenti online. Volevo chiederti se è corretto utilizzare le tue classi per far eseguire ongi tot minuti lo script che conta e mostra gli utenti online. Questo perchè attualmente lo script è nella pagina immediatamente dopo il login e non nelle altre… ergo lo script viene eseguito solo all'ingresso dell'utente e poi mai piu, con il risultato di mostrare offline un utente che invece magari è online. Una soluzione sarebbe di includere lo script in tutte le pagine ma con un cronjob sarebbe molto meglio… penso. 🙂

  20. StefanoV ha detto:

    $interval = 60 * $intervallo

    Per 2 minuti lascia il codice com’è e passa l’intervallo = 2

    Se poi vuoi i secondi allora al posto di 60 metti 1, e l’intervallo che passerai alla funzione sarà in secondi…

  21. Paolo ha detto:

    Ciao Stefano, avevo fatto io un errore il tuo script funziona benissimo, ho solo una domanda, ho fatto delle prove su “$interval = 60 * $intervallo;” ho notato questo, se metto ad 1 mi cicla ogni secondo se metto a 15 ogni 15 secondi ma se metto 120 mi cicla ogni 10minuti e non 2 minuti. Mi sai dire dove sbaglio? Grazie
    Paolo.

  22. StefanoV ha detto:

    Grazie. Fammi sapere, cosi se il problema è dovuto al mio script lo correggerò subito. 😉

  23. Paolo ha detto:

    Ok grazie,

    proverò a chiedere, l'unica cosa è che avendo impostato 1 lo script si dovrebbe ripete ogni minuto quindi il loro blocco è addirittura inferiore al minuto o addirittura immediato!! Grazie comunque e buon lavoro.

  24. StefanoV ha detto:

    Ciao Paolo, purtroppo alcuni host bloccano quel parametro a poche ore, o addirittura miunti. prova a chiedere al tuo servizio hosting se hanno impostato qualche limite.

  25. Paolo ha detto:

    Ciao Stefano,

    grazie per la tua classe, mi è utilissima, ho però un problema parte la prima volta e poi si ferma, ho provato anche con ini_set(’max_execution_time’, 0); ma nulla funziona solo quando la richiamo da browser. del tuo codice non ho cambiato nulla se non il tempo impostato a 1 e una aggiunta in example_script.php mettendo una query per scrivere la data e l'ora in un DB mysql. Hai qualche idea del perchè si blocca? Grazie

  26. StefanoV ha detto:

    Grazie a te!

    Quando sarai certo che il sistema funziona perfettamente, se avrai un pò di tempo, postami qui la tua conferma… così correggo lo script! 😉

  27. xxx ha detto:

    Grazie mille per la risposta tempestiva. Effettivamente immaginavo fosse un vincolo di alcuni host. Per ora il metodo che mi hai suggerito pare funzionare, ma dovrei testarlo per un po’ di tempo. Anche prima l’esecuzione era abbastanza casuale.
    Per ora pero’ sembra girare bene.

  28. StefanoV ha detto:

    Ciao, allora:
    a quanto pare non tutti gli hoster permettono il “set_time_limit(0)”…

    Alcuni bloccano questa funzione e settano un tempo loro per evitare che i processi vadano a sovraccaricare e quindi crashare il server…

    Puoi provare ad impostare al posto di quel comando, il codice: ini_set(‘max_execution_time’, 0);

  29. xxx ha detto:

    Ciao, io ho un problemino che non so da cosa puo’ dipendere. Ho provato la tua classe. Di php non ne sapevo niente ma sto iniziando a prenderci gusto. Ho notato una cosa. Lo script funziona perfettamente quando lo provo sulla mia macchina. Ma quando lo metto sull’host pare funzionare un tempo “random” e poi e’ come se si bloccasse il ciclo. Hai suggerimenti? Potrebbe essere l’host che ha impostato qualche cosa che interferisce con la tua classe?

  30. Gabriele ha detto:

    Purtroppo, niente da fare. Ho tenuto un solo cron nella cartella, ho eliminato il set_time_limit dallo script lanciato (e mantenuto il set_time_limit (0); nel tuo script), ho avviato il cronjob e chiuso il browser, ma il risultato è sempre lo stesso: dopo la prima esecuzione corretta, il ciclo si interrompe.

  31. StefanoV ha detto:

    Allora, ho letto la mail e il codice…

    Ovviamente prova 1 è solo una prova e non andrà messa online giusto? xkè 2 cron nella stessa cartella, come ho scritto nel post, non funzionano perchè vanno in conflitto tra loro…

    Poi altra cosa che ho notato all'inizio dello script ke lanci è:

    set_time_limit (300); # allow script to run longer

    In questo modo setti il limite di esecuzione, mentre nello script del cron è gia impostato su infinito (set_time_limit(0);) quindi prova a togliere questo…

    Cmq per evitare conflitti dall'esecuzione del cron col browser aperto sulla pagina ciclata, ti consiglio di avviare la pag di cron (dopo aver fatto la modifica ke ti ho detto prima) e chiudere il browser (tanto gira in background)..

    Prova e fammi sapere! 😉

  32. Gabriele ha detto:

    Ti ho inviato la email con i file necessari per l'esecuzione delle prove. Fammi sapere se ti è arrivata e se è tutto chiaro.

  33. StefanoV ha detto:

    Facciamo così: mandami la pagina da cui richiami cronjob e la pagina che esegui zippate a: info [at] sv-design.org

    E cerco di capire se sbagli qualcosa o se è un problema della mia classe! 😉

  34. Gabriele ha detto:

    Il tuo suggerimento in linea di massima è giusto. Infatti, eseguendo il tuo script con una pagina web contenente un codice semplice (es.: prova.php), il ciclo si ripete indefinitamente. Purtroppo, nel mio caso la pagina web contiene un codice piuttosto complesso e, per qualche motivo che non riesco a individuare, dopo la prima esecuzione corretta (con relativo rilascio del file di log), alla seconda esecuzione compare sul browser la pagina web richiamata da example_script.php e il ciclo di interrompe. Comunque, grazie mille per il tuo aiuto.

  35. StefanoV ha detto:

    Allora, ti spiego:

    quando tu nella pagina esempio.php usi questo codice:

    if( !$cron->cronFile(”example_script.php”, 180) )
    print(”Ciclo in esecuzione o file inesistente!”);

    dici di kiamare la PAGINA WEB dal nome example_script.php ogni 180 minuti…

    Se il file che aggiorna le notizie da te si chiama pippo.php, ti basta cambiare il codice richiamando quel file, ovvero così:

    if( !$cron->cronFile(”pippo.php”, 180) )
    print(”Ciclo in esecuzione o file inesistente!”);

  36. Gabriele ha detto:

    Scusami, ma non essendo un esperto, quello che per te è scontato per me è difficile da capire. Ciò che aggiorna l’xml non è un codice, ma una pagina web, che dovrebbe essere richiamata ad intervalli di tempo stabiliti (es.: 3 ore) per l’update. Ho provato ad inserire in example_script.php semplicemente l’indirizzo web della pagina, senza header, ma non funziona. E’ possibile con il tuo script richiamare ad intervalli di tempo prefissati una pagina web, come fa il cron, che però il mio provider non mi mette a disposizione? Se sì, qual è il codice corretto da inserire in example_script.php? Grazie.

  37. StefanoV ha detto:

    No, non va bene header!
    Header appunto setta l’header da visualizzare sul browser dell’utente, quindi lato server non fa nulla che a te serva!

    In example_script.php devi inserire il codice ke crea e/o aggiorna l’xml! Tutto qui 😉

  38. Gabriele ha detto:

    A me serve un aggiornamento lato server e non lato client. La pagina da aggiornare non è visualizzabile dagli utenti, ma serve per l’update e la produzione di un file .xml che alimenta poi tramite magpie le pagine viste dagli utenti. In questo caso, il codice che ti ho esposto con header va bene?

  39. StefanoV ha detto:

    Gabriele, se quello ke cerchi di fare è aggiornare la pagina all’utente ke la visualizza ogni 3 ore, nn puoi usare cron e header, xkè cron lavora in background quindi nn aggiornerà nulla all’utente…

    Per fare quello che chiedi devi usare Javascript con la funzione setInterval() 😉

  40. Gabriele ha detto:

    E' sparito il codice, forse a causa dei tag php. Provo a riscriverlo senza i tag di apertura e chiusura php, sperando che così si veda: header ("location: http://www.esempio.com/&quot;);

  41. Gabriele ha detto:

    Come codice da inserire in example_script.php va bene questo:

    ? Scusami, ma non sono molto esperto. Grazie.

  42. StefanoV ha detto:

    dentro example_script.php tu metti il codice della pagina che serve ad aggiornare le notizie, e poi tramite un'altra pagina…ad esempio "esempio.php" metti il codice:

    include 'libs/cronjob.class.inc.php';

    $cron = new CronjobSimulator();

    if( !$cron->cronFile("example_script.php", 180) )

    print("Ciclo in esecuzione o file inesistente!");

    dove 180 sono i minuti di intervallo prima di aggiornare… 180 minuti = 3 ore 😉

  43. Gabriele ha detto:

    Tramite Cronjob Simulator vorrei caricare una pagina web ogni tre ore per consentire l'aggiornamento delle notizie. Come devo impostare l'example_script.php? Grazie.

  44. Daniele ha detto:

    Ciao solo ora mi sono interessato al fatto di trovare un alternativa all'utilizzo del cron visto che, da quanto ho letto (ma potrei anche aver sbagliato), su altervista non è possibile accedere a questa funzioncina carina di linux. Ho letto il tuo codice e, come giustamente dici anche te, non è possibile killare l'esecuzione dello script a meno che, la funzione da te creata non restituisca al chiamante un FALSE. Ma questo comunque non fermerebbe, se non sbaglio, l'esecuzione, ma forse sarebbe più efficace, l'utilizzo di throw per generare un eccezione, che se non viene gestita, causerebbe l'interruzione "anomala" dello script. Sbaglio?

    Salutoni. Daniele

  45. StefanoV ha detto:

    Si avevo pensato a questa soluzione, e volendo la si può integrare…

    Però se non erro Throw e tutta la struttura try-throw-catch è stata introdotta da PHP5…

    Ho voluto rendere più compatibile la mia classe, anche a discapito di un piccolo spreco di risorse.

    Infatti, le istruzioni saranno in example_script.php, mentre il file ciclato all’infinito è esempio.php, ovvero un file di poche righe, direi quasi trascurabili se non si abusa di questa funzione.

    Potrei anche inserire un controllo sulla versione di PHP e quindi decidere se usare Throw o la Flag! Quando avrò un pò di tempo farò questa modifica.

    Grazie per il tuo parere! 😉

  46. […] seguente link vi rimanda all’articolo scritto su S.V. Design dove è presente una classe che ci consentirà […]

  47. […] l’articolo completo: http://www.sv-design.org/blog/php-cronjob-simulator/ Share and Enjoy: These icons link to social bookmarking sites where readers can share and […]

%d blogger hanno fatto clic su Mi Piace per questo: