Frage von Felix193, 6

[PHP] Programm (CMD/BATCH) starten?!

Hallo,

Ich möchte via PHP eine CMD/Batch-Datei starten, sodass diese sichtbar gestartet wird. Ich habe bestimmt 20-30 Methoden, meistens über exec() ausprobiert, das hat aber alles nicht geklappt! Kann mir jemand helfen?

Antwort
von goosejan, 4

Moin,

"sichtbar gestartet" solltest Du vielleicht noch etwas ausführen. Ich gehe davon aus, dass Du ein Konsolenprogramm in php schreibst.

Wenn sichtbar meint, dass Du die .bat Datei in einem neuen Fenster gestartet haben willst, dann ist die Antwort von NerdyByNature genau die richtige.

Wenn Du einfach nur die Ausgabe sehen möchtest dann benutzt Du am einfachsten system(), im Gegensatz zu exec() wird damit einfach nur der Befehl ausgeführt ohne Interaktivität.

Möchtest Du stattdessen die Ausgabe der .bat Datei für deinen PHP-COde sichtbar machen, benutzt Du popen.

Ich hab das mal als Beispiel zusammengefasst:

// Der Pfad zu Deiner .bat Datei
$pfad = 'c:\pfad\zur\datei.bat';

echo "Methode 1\r\n";
/**
* Methode 1
* 
* Die .bat Datei wird einfach nur ausgeführt,
* alle Ausgaben werden in demselben Konsolenfenster
* dargestellt, in dem das PHP Skript gestartet wurde.
**/
system('cmd /c '.$pfad);

echo "Methode 2\r\n";

/**
* Methode 2
* 
* Die .bat Datei wird ausgeführt, alle eventuellen
* Ausgaben werden ausgegeben. Im Beispiel hier maximal
* 2096 Zeichen.
* Hier im Beispiel wird damit die Variable $read gefüllt
* und dann in Zeile 29 einfach ausgegeben.
**/
$handle = popen('cmd /c '.$pfad, 'r');
$read = fread($handle, 2096);
echo "Ausgabe der .bat Datei: ".$read;
pclose($handle);

echo "Methode 3\r\n";
/**
* Methode 3 von NerdyByNature
* 
* Durch die Verwendung von exec zusammen mit start wird ein
* neues Konsolenfenster in Windows geöffnet.
**/
exec('start '.$pfad);
Kommentar von Felix193 ,

Alle Methonden hatte ich schon ausprobiert... Trotzdem vielen Dank!

Antwort
von NerdyByNature, 6

Hey Felix,

habe das gerade getestet und folgende Lösung hat bei mir funktioniert:

<?php 
    exec('start C:\DeinPfadZurBat\DeineBat.bat');
?>

Wenn Du zwischen start und C: ein /B setzt, wird die bat im Hintergrund ausgeführt, ohne das /B sichtbar, wie Du es wolltest...

Lieben Gruß,

NerdyByNature

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten