php: cattura l'output del command

Sto usando la function exec per eseguire i file eseguibili specifici in php.

exec ( $file , $output , $return_value ) ; 

Quando il file dato è stato eseguito correttamente, sono in grado di get l'output nel secondo argomento controllando i valori restituiti, quindi funziona correttamente. Ma il mio requisito è quando l'esecuzione del command fallisce per qualche motivo. Devo get quel messaggio di errore di quel programma eseguito. Cosa devo fare per get l'errore. attraverso la seconda argomentazione possiamo get solo l'output di successo. Non messaggio di errore.

Grazie.

Il secondo argomento $output cattura solo STDOUT dal tuo eseguibile. I messaggi di errore vengono solitamente inviati a STDERR modo che possano essere facilmente scritti in un registro errori o simile, ma ciò significa che non li vedrai quando chiami exec .

Se si tratta di un sistema linux, è ansible aggiungere 2>&1 al proprio command, per redirect STDERR su STDOUT . Non ho provato questo, ma dovrebbe inoltrare i messaggi di errore alla variabile $ output.

Modificare:

Ho letto su http://www.php.net/exec e sembra che funzioni.

 exec($file.' 2>&1', $outputAndErrors, $return_value); 

È anche ansible redirect gli errori in un file temporaneo e leggerli separatamente.

 exec($file.' 2> '.$tmpFile, $outputOnly, $return_value); 

Modifica 2

Sembra che Windows usi anche questo output in stile Bourne che reindirizza la syntax, quindi gli esempi dovrebbero funzionare anche per Windows.

Altro su flussi di input e output

Se hai bisogno di mantenere stderr e stdout separati, prova proc_open : http://php.net/manual/en/function.proc-open.php

$return_value avrà il codice di errore restituito dal programma che dovrebbe essere abbastanza significativo, non penso che tu possa avere di meglio.