2010-06-23 21 views
13

Estoy usando la función exec para ejecutar los archivos ejecutables específicos en php.php: capturando el resultado del comando

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

Cuando el archivo dado ejecutado con éxito estoy en condiciones de obtener la salida en el segundo argumento comprobando los valores de retorno, así, se está trabajando muy 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 programa 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.

Respuesta

32

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

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

Editar:

He leído sobre él en 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 ventanas también utiliza esta salida estilo Bourne redirigir la sintaxis, por lo que los ejemplos deben trabajar para las ventanas también.

More on input and output streams

0

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

Cuestiones relacionadas