Kann php eine Batch datei bearbeiten?

René1

Grünschnabel
Hi
Ich habe eine Bat datei die durch das Aufrufen einer Website mit php gestartet wird.#


PHP:
<?php
	system ("test.bat")
	?>
</html>

Bat:
Code:
START iTunes.exe

Funtioniert auch alles soweit.

Jetzt die eigentlich Frage:
Kann ich die Bat Datei durch php verändern?
z.b. Dass php die iTunes.exe durch Firefox.exe ersetzt?

Oder gibt es eine Möglichkeit Programme die Im Selben Ordner sind, wie die php datei, direkt ohne bat datei zu öffnen?


Vielen dank im Vorraus
 
Ich geh mal davon aus, das ganze läuft lokal.

Dann kannst du deine Batch-Datei locker austauschen.
PHP:
$exe = 'Firefox.exe';
file_put_contents('test.bat', "START {$exe}");
system ('test.bat');

Du kannst aber mit system() oder exec() auch direkt dein exe starten. Genauso wie über die Batchdatei
PHP:
exec('Notepad.exe');
 
Da du scheinbar bestimmte (Windows) Programme starten willst, gehe ich davon aus das es lokal auf dem heimischen Rechner laufen soll.


Dann kannst du es doch direkt von PHP aus starten:

PHP:
<?php exec ("start explorer.exe"); ?>

Das startet beispielsweise den Windows-Explorer, siehe exec.
 
Du müsstest dein Script nur so umbauen, dass Du die aufzurufende Datei als Option übergibst. Also z.B.

PHP:
<?php
system("test.bat iTunes.exe");
?>

.bat klingt nach einem Windows-System. Dort kenne ich mich mit der Schreibweise für diese Parameter für .bat-Dateien nicht aus. Du müsstest mal nach "windows bat parameter" suchen.
 
Hi

die BAT-Datei solltest du trotzdem verwenden.
Das PHP sonst nicht wartet oder nach der Max_execution_time das Programm mitabbricht etc.
wären nur enige der sonst möglichen Probleme.

Zu den Variablen Programmen
Wenn du die Seite mit zB. http://localhost/start.php aufrufst, kannst du mit
http://localhost/start.php?programm=itunes
was übergeben. Wie man im Iphone dann eine Auswahlmöglichkeit macht,
ohne immer den Pfad selbst einzugeben, schaffst du ja wahrscheinlich.

Von PHP zu BAT:
PHP:
system ("test.bat " . $_GET['programm']);

In der Bat-Datei kannst du (ersten) Parameter dann mit $1 ansprechen.

Ein Problem hat die Sache noch: Sicherheit.
Wenn dein XAMPP von außen erreichbar ist, könntest du
zB. einen zweiten Vhost auf einem anderen Port machen,
der nur vom LAN ansprechbar ist.

edt: Gleich 4 ziemlich ähnliche Antworten :)
Zur Info: Das Ganze soll vom Iphone aus gesteuert werden.
Gibt da einen anderen Thread.
 
Danke euch allen für die Antworten ;D

Wie man im Iphone dann eine Auswahlmöglichkeit macht,
ohne immer den Pfad selbst einzugeben, schaffst du ja wahrscheinlich.

Das war der hintergedanke, ich werde sichlich nicht jedesmal die Zeile per hand eingeben, da hab ich mir schon ne schöne app für gebastelt ;D

//edit
Habs so gemacht wie sheel geschrieben hat, es klappt jetzt jedoch nicht bei allen Programmen, bzw. Verknüpfungen.
Bei Firefox bzw. Itunes kein Problem, Skype geht nicht, da sagt er er hat den Pfad nicht gefunden.
 
Zuletzt bearbeitet:
Hi,

PHP:
<?php
/* beispiel: http://foo.bar/start.php?programm=firefox */

$PROGRAMS = array(
  "firefox" => "C:/Programme/Mozilla Firefox/firefox.exe",
  "sykpe" => "C:/Programme/wasweissich/sykpe.exe",
  "foo" => "C:/bar.exe",
);

if(isset($PROGRAMS[$_GET['programm'])) {
  system ("test.bat \"" . $PROGRAMS[$_GET['programm']) . "\"");
} else {
  die("programm nicht gefunden");
}
?>

Rufe die Programme mit absoluten Pfadangaben auf, dann sollte es keine Probleme mehr geben.

Gruß,
BK
 
Zuletzt bearbeitet:
Wenn ich deinen Code übernehmen kommt folgende Fehlermeldung:

Parse error: syntax error, unexpected ')', expecting ']' in F:\Software\xampp\htdocs\test2.php on line 17
 
So richtig:
PHP:
<?php
/* beispiel: http://foo.bar/start.php?programm=firefox */

$PROGRAMS = array(
  "firefox" => "C:/Programme/Mozilla Firefox/firefox.exe",
  "sykpe" => "C:/Programme/wasweissich/sykpe.exe",
  "foo" => "C:/bar.exe",
);

if(isset($PROGRAMS[$_GET['programm'])) {
  system ("test.bat \"" . $PROGRAMS[$_GET['programm']] . "\"");
} else {
  die("programm nicht gefunden");
}
?>
 
Es funktioniert nicht, es öffnet sich nur ein Konsolenfenster,
PHP:
<?php
/* beispiel: http://foo.bar/start.php?programm=firefox */

$PROGRAMS = array(
  "firefox" => "C:/Program Files (x86)/Mozilla Firefox/firefox.exe",
  "sykpe" => "C:/Programme/wasweissich/sykpe.exe",
  "foo" => "C:/bar.exe",
);

if(isset($PROGRAMS[$_GET['programm']])) {
  system ("test.bat \"" . $PROGRAMS[$_GET['programm']] . "\"");
} else {
  die("programm nicht gefunden");
}
?>
 
Zurück