2012-03-01 19 views
7

Come posso gestire CTRL + C in PHP sulla riga di comando? Le funzioni Pcntl_* non funzionano in Windows.CLI PHP in Windows: gestione dei comandi Ctrl-C?

+0

cosa stai cercando di ottenere? –

+0

Nessuna finestra da testare, forse ['w32api_register_function'] (http://www.php.net/manual/en/function.w32api-register-function.php) con [' SetConsoleCtrlHandler'] (http: // msdn. microsoft.com/en-us/library/windows/desktop/ms686016(v=vs.85).aspx), ma questo è indovinato qui ... e molto probabilmente sbagliato. – Wrikken

+0

@Dagon Ho bisogno che il mio script faccia qualcosa quando lo interrompo. Ad esempio, scrivi in-memory xml dom to file, prima di uscire. – x74x61

risposta

0

Se si desidera eseguire un'attività in PHP tramite riga di comando che richiede molto tempo, proverei ad organizzarlo in badge e tenere traccia di ciò che è già stato fatto.

Ora è possibile elaborare completamente ciascun badge (ad esempio: elaborare e quindi archiviarlo in un file xml) e non solo dopo l'elaborazione dell'intero elenco. Quindi un crash/stop in mezzo cancellerà solo un badge e non tutti.

Se si memorizza la posizione corrente dopo ogni distintivo da qualche parte, si può facilmente riprendere quando lo script si blocca o si arresta.

Ora, se si controlla l'elenco dei processi del sistema operativo per vedere se lo script è in esecuzione, è possibile scrivere un processo cron che avvia lo script ogni X minuti se si è verificato un arresto anomalo e non è ancora in esecuzione.

Così, TL; DR

  • lavoro processo in piccoli distintivi
  • posizione Memorizza dello scorso distintivo elaborato con successo
  • Controllare processo già in esecuzione all'avvio
  • Iniziamo continuamente copione fino a quando tutti sono felici !

A parte questo, mi piace PHP per piccoli lavori da riga di comando, ma se hai un'attività così grande, qualcos'altro potrebbe essere più adatto. Cerca qualcosa che può funzionare a lungo e può mostrare i suoi progressi. Forse una piccola app C# con un gui minimalista.

+0

Questa potrebbe non essere la soluzione CtRL + C che cercavi ma è una soluzione funzionante. Dubito fortemente che PHP possa gestire aborti di processo! Potresti comunque tentare la fortuna con "register_shutdown_function" – ToBe

+0

Bene, c'è pcntl_signal, ma è solo per i sistemi Unix. –

Problemi correlati