Wirklich alle Konsolen Ausgaben umleiten

Dolphon

Erfahrenes Mitglied
Hallo,

ich habe folgendes Problem.
Ich rufe mit folgendem Code eine *.bat Datei auf:

PHP:
$cmd ="C:/temp/test_objective.bat";
$retval = shell_exec($cmd); 
echo "xxxxxx\n";
echo $retval;
echo "xxxxxx\n";

Am Endes des Befehls welcher in der *.bat steht, ist folgendens angehangen "2>&1"
Leider werden mir aber nicht alle Ausgaben umgeleitet. D.H manchmal ist die Variable $retval leer, obwohl eine Ausgabe in der Konsole steht.

Wie komme ich an diese Meldungen dran?

Gruß

Dolphon
 
Ich wusste gar nicht, das Windows auch Standard-Kanal-Piping über die Kanal-Nummer unterstützt... Dennoch würde ich dir raten, exec() zu verwenden:

PHP:
exec($cmd, $output, $return_value);
if($return_value!=0) {
  echo "Fehler $return_value aufgetreten";
}

echo "<pre>";
echo $output;
echo "</pre>";
 
Hallo,

Hab mittlerweile heraus bekommen, wie man alle Ausgaben bekommen kann. Man erstellt eine*.cmd Datei, die die *.bat aufruft. Und das PHP-Skript ruf dann die *.cmd auf. Somit bekommt man alle Ausgaben.

Was ist den an shell_exec() schlecht?
Ich habe shell_exec() genommen, weil die gesamte Ausgabe nach Ausführung in einem STring steht, und ich dann direkt die String-Funktionen zum Fehler suchen und Item-ID extrahieren anwenden kann.

Bei exec(), muss ich doch das gesamte Array durchlaufen.
 
Du kannst das Array natürlich auch mit implode('\n', $array) zu einem String zusammen fügen. Ist besser als das Gefrickel mit Datei in Datei usw.
 
Zurück