web-dev-qa-db-fra.com

PHP exec () ne renvoie pas de message d'erreur en sortie

J'essaie d'obtenir un certain résultat pour la commande svn au format XML. La sortie est correcte lorsque je tape des paramètres valides. Cependant, lorsque je tape un mot de passe incorrect, la sortie ne montre pas le message d'erreur . C'est le code PHP:

exec('/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/', $output);

Voici la sortie que je reçois dans le 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)

Et voici le résultat obtenu de la variable $ output avec var_dump:

array(2) {
[0]=>
string(21) "<?xml version="1.0"?>"
[1]=>
string(5) "<log>"
}

Comme vous pouvez le constater, la variable $ output ne renvoie pas la troisième ligne de sortie, contrairement au terminal. Aidez-moi à obtenir le même résultat que dans le terminal (j'ai même essayé avec les méthodes Shell_exec () ou system (), mais elles renvoient le même résultat que exec ()) Merci d'avance!

37
Goran

Vous devez également capturer la stderr.

Redirection de stderr vers stdout devrait faire l'affaire. Ajoutez 2>&1 à la fin de votre commande.

par exemple.

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);
72
racetrack

Ce n'est probablement pas la solution, c'est juste une mauvaise suggestion: avez-vous essayé d'ajouter un écho supplémentaire dans la commande:

exec('/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/;**echo ""**', $output);

Et l’autre façon de résoudre ce problème est la suivante: si vous n’avez pas la dernière ligne de la sortie $, c’est dans la valeur renvoyée par la fonction exec () de toute façon .

$totalOutput = Push($msg,$output);

avec 

$msg = exec('/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/', $output);
0
Cedric