PHP (acronimo ricorsivo di PHP Hypertext Preprocessor) è concepito per la realizzazione di pagine web dinamiche, e non statiche.
Attualmente è utilizzato principalmente per sviluppare applicazioni web lato server ma può essere usato anche per scrivere script a linea di comando o applicazioni standalone con interfaccia grafica(GTK-PHP).
Vediamo oggi come simulare l’opzione cron eseguibile da GNU/linux (soltanto avendo accesso al server come root) con php.
Questa funzione permette di effettuare operazioni php ad un determinato orario.
es. effettua un backup alle 5 tutti i giorni…
Questi script è utile per chi(come me) non ha i privilegi amministrativi sull’host dove hosta :P (per esempio se si ha un sito hostato da Altervista o da Netsons,e simili) .
Veniamo il primo codice:
< ?
ignore_user_abort(TRUE);
set_time_limit(0);
$interval=60*15;
do{
//CODICE DA ESEGUIRE
sleep($interval); // funzione per attendere 15 minuti dopo l'intervento
}while(true);
?>
Analizziamo il codice:
ignore_user_abort(TRUE):Questa funzione fa continuare l’esecuzione dello script anche dopo la chiusura della pagina.
set_time_limit(0):Questa variabile impedisce che lo script non giri all’infinito.
$interval=60*15:Questo è il tempo, 60 secondi per 15 volte = a 15 minuti
In questo codice però ce un’errore: OGNI VOLTA CHE VIENE RICARICATA LA PAGINA IL TIMER SI RIAVVIA
.
Vediamo come rimediare:
< ?
if ($_GET[action]=="avvia_timer"){
ignore_user_abort(); // funzione per far continuare l'esecuzione dello script anche dopo la chiusura della pagina
set_time_limit(0); // funzione per far continuare lo script all'infinito
$interval=60*15; // ogni 15 minuti...
do{
// funzioni da svolgere ogni 15 minuti
sleep($interval); // funzione per attendere 15 minuti dopo l'intervento
}while(true);
}
else{exit();}?>
Cosi il time si avvia solo se ce una richiesta GET avvia timer:
$_GET[action]==”avvia_timer”
Bene adesso vediamo come terminare questa operazione…
Modifichiamo la precedente pagina sostituendo la riga:
ignore_user_abort(TRUE);
con questa:
ignore_user_abort(FALSE);
ricarichiamo la pagina e adesso una volta chiusa la pagina lo script si fermerà !
Altri:







PhP scrive:
27 giugno 2009 alle 16:10
Molto utile ;) Grazie
kaliber scrive:
28 giugno 2009 alle 11:20
bhe per fare in modo che lo script si avvi una volta sola con più refresh della pagina basterebbe salvare lo stato in un file di testo per esempio.
Altrimenti con le successive richieste $_GET[action] <- ”avvia_timer” lo script si riavvia.
Poi dipende da quello che si vuole fare.
ciao!
admin scrive:
28 giugno 2009 alle 15:26
@ kaliber:
Ciao kaliber, quello che dici tu è giusto ;)
Ma è giusto anche $_GET[action]==”avvia_timer” poichè quella ichiesta la conosce solo l’ admin e quindi sa lui quando avviarlo :P
kaliber scrive:
29 giugno 2009 alle 22:49
@ admin:
sisi, come esempio scolastico va bene quello che dici :) Altrimenti il codice prendeva più corpo disorientando lo scopo di ciò che il tuo articolo vuole comunicare…
Con la mia soluzione si evita eventuali “click involontari” supponendo che l’admin faccia puntare per esempio un bottone dalla sua area riservata verso ?action=avvia_timer
E’ quello che farò prossimamente nel mio sito per alcune cosucce ;)
grazie, molto utile! pagina aggiunta ai segnalibri.
Ciao!
admin scrive:
30 giugno 2009 alle 09:23
@ kaliber:
Si dopo ognuno fa come vuole ;)
Il mio script era un normalissimo esempio per far capire quanto è potente php, dopo ognuno se lo personalizza come vuole ;)
Ad esempio per fare backup o ottimizzare il database, come ho fatto io ogni tal ora,giorno ;)
Grazie a te!!!
Ciao kaliber
Marco scrive:
29 agosto 2009 alle 18:52
Ciao.
Ho avviato il primo codice non conoscendo il secondo ed ora ricevo in continuazione email dato che avevo impostato un invio di mail.
C’è un modo per eliminare questo task senza dover richiedere il riavvio del server?
Grazie,
Marco.
Alessio scrive:
29 agosto 2009 alle 20:46
@ Marco:
Ciao marco, si il modo c’è..anzi ci sono più modi.
Il primo è quello di rinominare lo script php ad esempio script.php in script.ph
Il secondo è di editarlo cosi:
ignore_user_abort(FALSE); e ricaricarlo dal brower.
Spero di asserti stato d’aiuto ciao Marco