2012-10-13 6 views
7

Ho uno script che utilizza while(true) da eseguire in modo che venga eseguito per sempre finché non muore. Voglio essere in grado di far risuonare qualcosa una volta ogni 4 minuti, come posso fare questo? Lo script viene eseguito al prompt dei comandi e utilizza while(true), quindi è confuso e non sono sicuro di come farlo farlo ogni 4 minuti. Come faccio a farlo eco qualcosa una volta ogni 4 minuti mentre ancora in un while(true)?Come eco ogni 4 minuti mentre si è in un ciclo infinito

+0

forse sleep o delay function – rsz

+1

Stai provando a generare un processo server per fare un po 'di lavoro da PHP o è uno script locale che stai eseguendo? – jheddings

risposta

6

Si può provare

while(true) 
{ 
    sleep(240); // sleep for 240 sec 
    echo " Hello World" ; 
} 

O

$time = time(); 
while (true) { 
    /* 
    * Play Some Ball 
    */ 

    if ((time() - $time) >= 240) { 
     echo date("Y:m:d g:i:s"), PHP_EOL; 
     $time = time(); 
    } 
    sleep(2); 
} 

Test uscita con Time = 2 sec, Sleep = 1 sec

2012:10:14 12:50:56 
2012:10:14 12:50:58 
2012:10:14 12:51:00 
2012:10:14 12:51:02 
2012:10:14 12:51:04 
2012:10:14 12:51:06 
2012:10:14 12:51:08 
2012:10:14 12:51:10 
2012:10:14 12:51:12 
2012:10:14 12:51:14 
+2

Non riesco a farlo dormire perché ne ho bisogno attivo. –

+2

Consiglierei sempre un piccolo sonno su un circuito chiuso che funzionerà per sempre. Questo o qualche altro metodo di rendimento per evitare un ciclo che consuma tutto. – jheddings

+0

@jheddings sono totalmente d'accordo con te ... Bello uno – Baba

1

Prova ad aggiungere in un ciclo di funzione del parametro while(true) { ... } sleep().

$sleep = 4*60; 
while(true) 
{ 
    # waiting...   
    sleep($sleep); 
    # work after 240 mins 
} 
3

Utilizzando un metodo sleep effettivamente fermare lo script l'esecuzione. Non sono al 100% se questo è ciò che vuoi che accada.

Un altro modo per attaccare questo problema sarebbe quello di confrontare i timestamp dall'ultimo comando "echo" su ogni iterazione.

$echo_time = time(); 
$interval = 4*60; 
while(true){ 
    if ($echo_time + $interval >= time()){ 
    echo "$interval seconds have passed..."; 
    $echo_time = time(); // set up timestamp for next interval 
    } 
    // other uninterrupted code goes here. 
} 

Questo permetterà il codice all'interno del tuo ciclo per continuare l'esecuzione e selezionare solo i tempi all'inizio di ogni iterazione.

+0

In php7 'echo" $ intervallo di secondi sono passati ... "; ' dovrebbe essere: ' echo $ intervallo. "secondi sono passati ..."; ' Oppure: ' echo $ interval. 'secondi sono passati ...'; // quot singolo è più veloce del doppio quot – jagb

Problemi correlati