2010-08-08 20 views
20

La questione sorta di dice tutto - c'è una funzione che fa la stessa cosa come il JavaScript funzione setTimeout() per PHP? Ho cercato php.net, e non riesco a trovare alcun ...Esiste una funzione simile a setTimeout() (JavaScript) per PHP?

+0

@KennyTM - Perché è importante ...? – Alexander

+1

@TheLife in modo che le persone possano trovare una soluzione reale per il problema dell'OP? :) –

risposta

8

Non c'è modo di ritardare l'esecuzione di parte del codice di nello script corrente. Non avrebbe molto senso, poiché l'elaborazione di uno script PHP avviene interamente sul lato server e si ritarderebbe solo l'esecuzione complessiva dello script. C'è sleep() ma questo interromperà semplicemente il processo per un certo tempo.

È possibile, naturalmente, programmare uno script PHP da eseguire in un momento specifico utilizzando i lavori cron e simili.

+0

È un po 'difficile da spiegare - quello che volevo era esattamente mettere in pausa la sceneggiatura :) Fondamentalmente quello che voglio fare è "scherzare" con uno dei miei amici. Ho inserito un input in cui digiti il ​​tuo nome e quando invii una chat room è simulata e per renderla più realistica voglio che i messaggi dello sconosciuto, il mio amico stia "parlando", per apparire uno per uno se sai cosa intendo :) – Latze

+6

Gli eventi a tempo non hanno senso perché lo script viene eseguito sul lato server? Non sto seguendo l'argomento. Certamente sono meno utili in PHP a causa dell'assenza di concorrenza, ma è importante avere uno script che faccia qualcosa dopo un certo periodo di tempo o in un certo istante. – Artefacto

+2

@Latze sembra qualcosa che vorresti fare usando JavaScript sul lato client, vero? –

9

C'è la funzione sleep, che mette in pausa lo script per un determinato periodo di tempo.

Vedere anche usleep, time_nanosleep e time_sleep_until.

+0

sarebbe ancora bello simulare questo tipo di codice in php: http://hastebin.com/rujakezuco.lisp. il sonno sta bloccando, i timeout non lo sono. – Dmitry

10

PHP non è gestito da eventi, quindi un setTimeout non ha molto senso. Puoi certamente imitarlo e in effetti qualcuno ha scritto un Timer class che potresti usare. Ma farei attenzione prima di iniziare a programmare in questo modo sul lato server in PHP.

+1

Ma php ha gli strumenti per far sì che il tuo script specifico sia guidato dagli eventi. es. eseguendo php tramite console potresti voler programmare più eventi in momenti diversi, a questo punto ha perfettamente senso avere timeout. – Dmitry

2

A meno che non stiate utilizzando AJAX per avere richieste live, PHP non sarebbe la lingua preferita per questo problema. Script PHP non hang e attendere un'altra risposta. Non sono persistenti. Javascript sarebbe richiesto.

Anche per uno scherzo, una funzione javascript AJAX accoppiato con uno script PHP per analizzare l'input e rispondere di conseguenza sarebbe esattamente quello di cui avresti bisogno. Si potrebbe anche abbinare questo con la funzione sleep in PHP per renderlo più realistico. Inoltre, vorrei preparare una serie di diverse istruzioni da analizzare per il server, si potrebbe arrivare fino a impostare la quantità di sleep tempo richiesto per ogni istruzione. Per esempio:

Database MySQL ESEMPIO:

| ID | SLEEP | STATEMENT             | 
| 1 | 3 | Hello              | 
| 2 | 10 | I have been alright, nothing new.       | 
| 3 | 20 | This is a really long message that takes 20 seconds to type | 

Così si potrebbe analizzare come segue:

$query = mysql_query("SELECT * FROM `responses` WHERE `id`='3'"); 
$array = mysql_fetch_array($query); 
sleep((int)$array['sleep']); //convert sleep time to integer, sleep. 
die($array['statement']);  //print the statement back to AJAX function 
1

se avete bisogno di fare un'azione dopo l'esecuzione del codice php si può fare con un'eco

echo "Success.... <script>setTimeout(function(){alert('Hello')}, 3000);</script>"; 

così dopo un certo tempo nel client (browser) si può fare qualcos'altro, come un reindirizzare ad un altro script php per esempio o echo un avviso

1

http://php.net/manual/en/class.evtimer.php è probabilmente quello che stai cercando, puoi avere una funzione chiamata durante intervalli impostati, simile a setInterval in javascript. è un'estensione pecl, se hai whm/cpanel puoi facilmente installarlo attraverso la pagina di installazione software/estensione di pecl.

Non avevo notato questa domanda è del 2010 e la classe di evtimer ha iniziato a essere codificata nel 2012-2013.così come un aggiornamento a una vecchia domanda, ora c'è una classe che può farlo in modo simile a javascripts settimeout/setinterval.

6

Un paio di cose che mi piacerebbe notare su timer in PHP:

1) Timer in PHP ha senso se usato in script di lunga durata ( demoni e, forse, negli script CLI). Quindi, se non stai sviluppando questo tipo di applicazione, non hai bisogno di timer.

2) I timer possono essere bloccanti e non bloccanti. Se si utilizza sleep(), si tratta di un timer di blocco, poiché lo script si blocca solo per un periodo di tempo specificato. Per molte attività, i timer di blocco vanno bene. Ad esempio, l'invio di statistiche ogni 10 secondi. E 'ok per bloccare lo script:

while (true) { 
    sendStat(); 
    sleep(10); 
} 

3) timer non bloccante ha senso solo in applicazioni event-driven, come websocket-server. In tali applicazioni, un evento può verificarsi in qualsiasi momento (ad es. Connessione in ingresso), quindi non è necessario bloccare l'app con sleep() (ovviamente). Per questo scopo ci sono librerie ad anello di eventi, come reactphp/event-loop, che consente di gestire più flussi in modo non bloccante e ha anche funzionalità timer/intervallo.

4) Sono possibili timeout non bloccanti in PHP. Può essere implementato tramite la funzione stream_select() con parametro timeout (vedere come è implementato in reactphp/event-loop StreamSelectLoop::run()).

5) Ci sono estensioni PHP come libevent, libev, event che permettono l'attuazione timer (se si vuole andare Hardcore)

Problemi correlati