webentwicklung-frage-antwort-db.com.de

PHP exec () gibt keine Fehlermeldung in der Ausgabe aus

Ich versuche, eine bestimmte Ausgabe für den Befehl svn im XML-Format zu erhalten. Die Ausgabe ist in Ordnung, wenn ich gültige Parameter eingebe. Wenn ich jedoch ein falsches Passwort eingebe, wird in der Ausgabe keine Fehlermeldung angezeigt. __ Dies ist der 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);

Hier ist die Ausgabe, die ich im Terminal bekomme:

<?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)

Und hier ist die Ausgabe, die ich mit var_dump von der Ausgangsvariable $ bekomme:

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

Wie Sie sehen, gibt die Ausgangsvariable $ keine dritte Zeile der Ausgabe zurück, wo das Terminal dies tut. Bitte helfen Sie mir, die gleiche Ausgabe zu erhalten, die ich im Terminal bekomme (ich habe es sogar mit Shell_exec () - oder system () - Methoden versucht, aber sie geben dieselbe Ausgabe wie exec () zurück). Wie erhalte ich die volle Ausgabe? Danke im Voraus!

37
Goran

Sie müssen auch die stderr erfassen.

Das Umleiten von stderr nach stdout sollte den Trick ausführen. Hängen Sie 2>&1 an das Ende Ihres Befehls an.

z.B.

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

Das ist wahrscheinlich nicht die Lösung, nur ein schlechter Vorschlag: Haben Sie versucht, ein zusätzliches Echo in den Befehl einzufügen:

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

Und der andere Weg, dies zu lösen, ist, wie bereits erwähnt,: Wenn Sie nicht die letzte Zeile in der $ -Ausgabe haben, ist diese sowieso im zurückgegebenen Wert der exec () - Funktion

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

mit 

$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