uso - php macrosustitucion
PHP: exec() respuestas de error? (6)
A continuación se muestra el comando que intenté ejecutar, sin éxito:
exec(''ln -s '' . PLUGIN_DIR . ''/.htaccess '' . ABSPATH . ''/.htaccess'');
Cuando agrega un dado () al final, detecta que hay un error:
exec(''ln -s '' . PLUGIN_DIR . ''/.htaccess '' . ABSPATH . ''/.htaccess'') or die(''what?!'');
Para la instrucción exec () anterior, un problema de permisos está causando el error, pero PHP no lo muestra. ¿Cómo se muestra desde PHP qué error está ocurriendo?
Puede recibir el resultado de salida de la función exec pasando un segundo parámetro opcional:
exec(''ln -s '' . PLUGIN_DIR . ''/.htaccess '' . ABSPATH . ''/.htaccess'',$output);
var_dump($output);
Si no encuentra el error a través de ese segundo parámetro, 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. Atentamente.
El parámetro $ output no parece funcionar si el programa que llama escupe la salida a STDERR.
Una mejor forma de manejar esto es redirigir el resultado de exec a un archivo y luego mostrar el contenido de ese archivo si hay una condición de error.
Si $ cmd contiene el comando exec, agregue algo como esto:
$cmd.=" > $error_log 2>&1"
Luego examine los contenidos de la especificación de archivos en $ error_log para obtener información detallada sobre por qué falló el comando.
También tenga en cuenta que si finaliza 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 haya finalizado.
El siguiente código capturará tanto la salida normal (desde StdOut) como la salida de error (desde SdtErr).
exec(''ln -s '' . PLUGIN_DIR . ''/.htaccess '' . ABSPATH . ''/.htaccess'' . ''2>&1'',$output);
var_dump($output);
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
esto funcionó para mí: añada 2> y 1 al final de su comando.
Visto aquí: php exec () no devuelve un mensaje de error en la salida al ejecutar el comando svn
Aclamaciones