2008-12-06 10 views
17

A continuación se muestra el comando intenté realizar, sin éxito:¿Cómo recuperar las respuestas de error PHP exec()?

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess'); 

Cuando se agrega un troquel() en el extremo, que las capturas que hay un error:

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess') or die('what?!'); 

Para el ejecutivo anterior (), un problema de permisos está causando el error, pero PHP no lo muestra. ¿Cómo se muestra desde PHP qué error está ocurriendo?

Respuesta

15

pueda recibir el resultado de la salida de la exec function haciendo pasar un segundo parámetro opcional:

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess',$output); 
var_dump($output); 
+5

$ salida en este caso sólo se llevará a cabo la salida de sdtout no desde el sdterr – Amaynut

2

Si usted no encuentra el error a través de ese segundo parámetro, se puede buscar el registro de errores de Apache, por ejemplo en Ubuntu Server 12.10 a través del comando $ tail /var/log/apache2/error.log Estaba ejecutando un script de python de php, cuyo error solo se imprimió allí, y por lo tanto pude diagnosticarlo. Saludos cordiales.

7

El parámetro $ output no parece funcionar si el programa que llama escupe la salida a STDERR.

Una mejor manera de manejar esto es redirigir la salida de exec a un archivo y luego mostrar el contenido de ese archivo si hay una condición de error.

Si $ cmd tiene el comando exec añadir algo como esto:

$cmd.=" > $error_log 2>&1" 

A continuación, examinar el contenido de la especificación de archivo en $ error_log para obtener información detallada acerca de por qué el comando falló.

También tenga en cuenta que si finaliza este comando con un & al final del comando, una comprobación inmediata del contenido de $ error_log puede no revelar la información de registro: el script puede verificar/procesar el archivo antes de que el sistema operativo terminado.

6

El siguiente código captar tanto la salida normal (de StdOut) y la salida de error (de SdtErr).

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess' . '2>&1',$output); 
var_dump($output); 
+0

funcionó para mí :) – vijay

2

Esto funcionó para mí en varios escenarios:

ob_start(); 
exec($cmd . " 2>&1", $output); 
$result = ob_get_contents(); 
ob_end_clean(); 
var_dump($result); 

El espacio entre "2 es importante

Cuestiones relacionadas