2010-08-06 2 views
8

Ho script php che chiamano script perl per fare varie cose e a volte capisco dove va avanti e avanti senza ottenere una risposta, questo è basato sulla variabile che viene passata allo script perl e sto facendo un sacco di diversi in successione quindi non riesco a fare il debug direttamente perché non ho una risposta da perl ...Impostare un timeout per una funzione/blocco di codice specifico (non l'intero script)?

Mi piacerebbe davvero essere in grado di impostare una funzione php o un blocco di codice per timeout dopo un certo numero di secondi .. Ho cercato su questo ma non ho ancora trovato nulla su come farlo,

Stavo pensando che qualcosa del genere potrebbe funzionare ma non penso che sarebbe aggiorna dinamicamente la variabile $ time, ma forse c'è un modo per ottenerlo s per lavorare? Ogni consiglio è apprezzato

$time = time(); 
$timeout = $time + 5; //just as an example 

do { 

// do stuff 
} while ($time < $timeout) 
+0

mentre per l'aggiornamento, ma se la chiamata del codice perl è all'interno del tempo non funzionerà se quella è una chiamata che attende la risposta di esso. – Prix

+0

sì questo è il problema quindi, suppongo che aspetti il ​​ritorno del perl non importa quale sia lo – Rick

+0

se non ti interessa davvero il ritorno potresti farlo in modo diverso, fai il comando come: 'exec (" mio_command_qui>/dev/null 2> &1 &"); 'che eseguirà il tuo codice sullo sfondo invia l'output a un buco nero, in questo modo il tuo codice php continuerà a funzionare ma avrai quindi bisogno di un approcio diverso per sapere se il tempo è finito o meno ... potresti per esempio fai in modo che il tuo file perl crei un file con 1 o 0 su di esso come un file PID e puoi controllarlo dal tuo loop come volevi. – Prix

risposta

8

la soluzione migliore sarebbe quella di utilizzare proc_open, sonno per l'importo di timeout e quindi chiamare proc_terminate se il processo non è ancora completato.

Vedere http://us3.php.net/manual/en/book.exec.php per i dettagli sulla famiglia proc_ *.

+0

Lo esaminerò, tuttavia, ho bisogno di un ritorno da Perl, solo che nel caso di non dare il ritorno entro un ragionevole lasso di tempo, non ho un ritorno a debugarlo .. Avevo sentito parlare di proc_open prima, ma non ero sicuro di poter ottenere un ritorno da esso – Rick

0

Beh, non sono così sicuro che questa domanda avrebbe una risposta in base a come l'ho chiesto, quindi quello che ho intenzione di fare è fare la chiamata perl dove php non aspetta una risposta e ha scritto perl l'output in un file di testo, quindi php leggere questo dopo un numero specificato di secondi, penso che questo sia il modo più semplice per farlo, è solo per una piccola app che sto usando su un server locale