2009-07-18 4 views
4

Ich muss eine .cmd Stapeldatei innerhalb eines php Indexes laufen lassen.Wie man eine .cmd Datei innerhalb von PHP laufen lässt und die Ergebnisse anzeigt

Der Zugriff auf die PHP erfolgt über eine authentifizierte Sitzung in einem Browser.

Wenn ich die .cmd-Datei auf dem Desktop des Servers ausführen, spuckt es eine Ausgabe zu cmd.exe aus.

Ich möchte diese Ausgabe zurück auf die PHP-Seite routen.

Ist das machbar?

+0

[Kommentar erneut hinzugefügt, da der Link borked] Wird nicht die .cmd-Datei in Backticks tun, wie das Beispiel mit der .bat-Datei hier? http://www.php.net/manual/pl/language.operators.execution.php – sigint

+1

So ähnlich? Ich habe PHP gerade nicht zur Hand, also kann ich das nicht testen, sorry! $test"; ?> – sigint

+0

@ hamlin11 - Was nicht funktioniert ("print' ls'; ")? Ich habe es gerade getestet (auf einem Linux-Rechner) und es hat gut für mich funktioniert. Versuchen Sie: –

Antwort

4

Ja, es ist machbar. Sie können

exec("mycommand.cmd", &$outputArray); 

und drucken den Inhalt des Arrays verwenden:

echo implode("\n", $outputArray); 

look here for more info

2
$result = `whatever.cmd`; 
print $result; // Prints the result of running "whatever.cmd" 
1

Sie shell_exec verwenden können, oder die backticks operator, einen Befehl zu starten und die Ausgabe erhalten als eine Schnur.

Wenn Sie Parameter übergeben wollen auf diesen Befehl, sollten Sie die Verwendung escapeshellargs ins Auge fassen, sie zu entkommen, bevor dem Aufruf des Befehls; und Sie vielleicht einen Blick auf escapeshellcmd nehmen zu ^^

1

Verwenden Sie den PHP-Funktion popen()

2

Ich ziehe popen für diese Art von Aufgabe zu verwenden. Vor allem für lang laufende Befehle, da Sie die Ausgabe Zeile für Zeile abrufen und an den Browser senden können, sodass die Gefahr einer Zeitüberschreitung geringer ist. Hier ist ein Beispiel:

$p = popen('script.cmd', 'r'); 
if ($p) 
{ 
    while (!feof($p)) 
     echo gets($p); // get output line-by-line 
    pclose($p); 
}