shell_exec - PHP exec() no devuelve el mensaje de error en la salida
shell_exec not working (3)
Estoy tratando de obtener cierto resultado para el comando svn en formato XML. La salida está bien cuando escribo parámetros válidos. Sin embargo, cuando escribo una contraseña incorrecta, la salida no muestra un mensaje de error. Este es el código PHP:
exec(''/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/'', $output);
Aquí está la salida que obtengo en la terminal:
<?xml version="1.0"?>
<log>
svn: OPTIONS of ''http://a51.unfuddle.com/svn/a51_activecollab'': authorization failed: Could not authenticate to server: rejected Basic challenge (http://a51.unfuddle.com)
Y aquí está la salida que obtengo de la variable $ output con var_dump:
array(2) {
[0]=>
string(21) "<?xml version="1.0"?>"
[1]=>
string(5) "<log>"
}
Como puede ver, la variable $ output no devuelve la tercera línea de salida, donde lo hace la terminal. Ayúdame a obtener el mismo resultado que obtengo en el terminal (incluso lo intenté con los métodos shell_exec () o system () pero devuelven el mismo resultado que exec ()) ¿Cómo obtengo el resultado completo? ¡Gracias de antemano!
Necesita definir una variable en la que almacenar el mensaje
$msg = exec(''/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51 _activecollab/'');
Necesitas capturar el stderr
también.
Redirigir stderr
a stdout
debería hacer el truco. Agregue 2>&1
al final de su comando.
p.ej
exec("/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/ 2>&1", $output);
Probablemente esa no sea la solución, solo una mala sugerencia: ha intentado agregar un eco extra en el comando:
exec(''/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/;**echo ""**'', $output);
Y la otra forma de resolver eso es como ya se mencionó: si no tiene la última línea en $ salida, está en el valor devuelto de la función exec () de todos modos. Tendría entonces
$totalOutput = push($msg,$output);
con
$msg = exec(''/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/'', $output);