php: capturando el resultado del comando

Estoy usando la función exec para ejecutar los archivos ejecutables específicos en php.

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

Cuando el archivo dado se ejecutó con éxito, puedo obtener el resultado en el segundo argumento comprobando los valores de retorno, por lo tanto, está funcionando bien. Pero mi requisito es cuando la ejecución del comando falla debido a alguna razón. Necesito obtener ese mensaje de error de ese progtwig ejecutado. Lo que necesito hacer para obtener el error. a través del segundo argumento, podemos obtener solo la salida exitosa. No mensaje de error

Gracias.

El segundo argumento $output solo captura STDOUT de tu ejecutable. Los mensajes de error generalmente se envían a STDERR para que puedan escribirse fácilmente en un registro de errores o similar, pero esto significa que no los verá cuando llame a exec .

Si se trata de un sistema Linux, puede agregar 2>&1 a su comando, para redirigir STDERR a STDOUT . No he intentado esto, pero debería reenviar los mensajes de error a su variable $ salida.

Editar:

Lo leí en http://www.php.net/exec , y parece que esto funcionaría.

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

También es posible redirigir los errores a un archivo temporal y leerlos por separado.

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

Editar 2

Parece que Windows también usa esta syntax de redirección de salida de estilo Bourne, por lo que los ejemplos deberían funcionar también para Windows.

Más sobre flujos de entrada y salida

Si necesita mantener stderr y stdout por separado, intente proc_open : http://php.net/manual/en/function.proc-open.php

El $return_value tendrá el código de error devuelto por el progtwig, que debería ser lo suficientemente significativo, no creo que pueda tener algo mejor.