Domanda

Gli script PHP possono continuare l'esecuzione dopo Richiesta pagina HTTP , quindi come posso finalmente interrompere l'esecuzione quando ho finito?

Inoltre, c'è un evento per rilevare quando il sistema operativo sta per interrompere forzatamente lo script? o come posso mantenere un timer interno per prevedere max_execution_time ?

È stato utile?

Soluzione

Puoi utilizzare register_shutdown_function per registrare una funzione da chiamare alla fine dell'esecuzione dello script. Puoi usarlo per rilevare quando lo script è stato terminato ed eseguire un certo insieme di azioni.

Altri suggerimenti

exit () / die () interromperà uno script php.

Per sapere quando interrompere lo script, devi solo utilizzare microtime come timer e salva come costante (o recupera dal file php.ini) il tempo massimo di esecuzione.

Puoi anche consultare le Gestione delle connessioni . Dove abbiamo cose come connection_aborted () e connection_status ()

Ma qual è il problema che stai cercando di risolvere?

Per avere una richiamata nel momento in cui la tua richiesta viene chiusa, usa register_shutdown_function (myfunction) .

Proprio come la maggior parte degli ambienti POSIX, PHP supporta anche gestori di segnali . Puoi registrare il tuo gestore per l'evento SIGTERM .

function my_abort_handler( $signo ) {
   echo "Aborted";
}

pcntl_signal( SIGTERM, "my_abort_handler" );

Potresti dare un'occhiata a pcntl-alarm che consente a uno script di inviare un segnale a se stesso. Contiene anche alcuni esempi su come catturare i segnali di kill che possono essere inviati dal sistema operativo. E muori () davvero.

Bene, potresti iniziare un $ start = microtime (true) che restituirà un timestamp. Quindi puoi semplicemente continuare a controllare microtime (true) e sottrarlo dal tuo orario di inizio per ottenere il numero di secondi dall'esecuzione.

Ma no, non puoi " catturare " lo script come terminato per il motivo della richiesta troppo lunga. Potresti provare a fare alcune cose dell'ultimo minuto nel gestore dello spegnimento, ma non sono sicuro che PHP lo onorerà.

Sembra che ci fosse una funzione che fa esattamente quello che vuoi, connection_timeout () , ma è stato deprecato e rimosso. Non so se c'è qualche tipo di sostituzione per questo, tuttavia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top