Come si scrive uno script PHP che continua a essere eseguito, anche dopo aver svuotato del testo e terminato la richiesta HTTP? È possibile?Uno script PHP può continuare a essere eseguito dopo aver terminato la richiesta HTTP?
risposta
Per eseguire PHP app per sempre o fino a quando termina php
ignore_user_abort(true);
set_time_limit(0);
sembra pericoloso se la pagina viene richiesta frequentemente, il server potrebbe avere un numero elevato di processi che non stanno facendo nulla. – rsman
potreste essere interessati dalla direttiva di configurazione ignore_user_abort
, e/o la funzione ignore_user_abort
:
Imposta se una disconnessione client dovrebbe causare uno script per essere interrotta.
Usando questo, si potrebbe:
- generare la parte della pagina che deve essere inviato al browser
- a filo l'uscita, con
flush
e/oob_flush
- chiamata
ignore_user_abort
(ora o prima) - fare altri lavori
Il browser dell'utente probabilmente indicherà ancora "in attesa" o "caricamento", ma il contenuto della pagina verrà caricato e visualizzato e, anche se l'utente preme "stop", lo script dovrebbe continuare la sua esecuzione.
Per maggiori informazioni, non v'è un esempio nella pagina del manuale di quella funzione - e si può dare un'occhiata a questo articolo: How to Use ignore_user_abort()
to Do Processing Out of Band
Naturalmente, mentre questo può essere utilizzato per un certo processo di luce (come "ripulire" la roba alla fine di una pagina, mentre lo visualizzi il più velocemente possibile per l'utente), sarai comunque limitato da max_execution_time
e simili.
Quindi, questa non è una soluzione da utilizzare per calcoli lunghi/pesanti.
Vedere la risposta da [Processi PHP Sfondo] (http://stackoverflow.com/questions/265073/php-background-processes) – drfloob