exec() unter WinDOSen und Linuxen
Tom
- php
Hello,
irgendwie macht mir die Portabilität der Applikation mit XAMPP noch wirkliche Probleme. Bisher humpelt sie auf Windows eXPerimental, Windows 2000, Windows Müll Edition, Windows 98 SE, Linux Ubuntu, Linux Debian so leidlich vor sich hin.
Wie ist es denn mit exec() nun richtig? Stellt mir exec() eine Shell zur Verfügung, oder nicht?
Wenn ich auf Win98SE die Sache wie folgt aufbaue, klappt alles ohne zu Mucken. Lasse ich die Extra-Shell (command.com) weg, dann wird augenscheinlich nach dem Befehlsinterpreter gesucht, und zwar in der Bootreihenfolge des Systems (hier: Disklaufwerk, CDROM, Festplatte)
define('MAGICMIMEFILE','E:/INTERNET/XAMPP/xampp/MimeTypes/bin/file.exe');
exec ('command.com /c '.realpath(MAGICMIMEFILE)." -bi ". escapeshellarg($filename), $_mime, $error);
Es würde mich nun nicht besonders stören, es so aufzubauen, wenn nicht die Befehlsinterpreter bei allen Systemen wieder anders heißen würden. Außerdem benötig ich die Konstruktion für die Linuxe und Windows eXPerimantal überhaupt nicht.
Konkrete Fragen:
1. Wie kann ich das OS feststellen, auf dem die Sache läuft?
2. Kann ich für den Befehlsinterpreter auf eine Systemvariable zurückgreifen, oder ihn anders ermitteln?
Irgendwie fällt mir nix mehr ein :-((
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hello,
Wenn ich auf Win98SE die Sache wie folgt aufbaue, klappt alles ohne zu Mucken.
April, April :-((
Das war nur kurzzeitige Selbstverarschung.
Ich weiß mir keinen Rat mehr, wie ich das Ansprechen des Diskettenlaufwerkes beim Aufruf der exec()-Funktion in PHP 5.x aus dem XAMPP-Paket verhindern kann.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo,
Stellt mir exec() eine Shell zur Verfügung, oder nicht?
für Linux werden nur die eingegebenen Parameter geprüft, der Status des Safe Mode abgefragt und dann wird popen()
<stdio.h> ausgeführt.
Für Windows wird auf eine Funktion CreateProcess()
zurückgegriffen, die aber nicht in den Sourcen definiert wird. (Vielleicht sagt Dir das was.)
Wenn ich auf Win98SE die Sache wie folgt aufbaue, klappt alles ohne zu Mucken. Lasse ich die Extra-Shell (command.com) weg, dann wird augenscheinlich nach dem Befehlsinterpreter gesucht, und zwar in der Bootreihenfolge des Systems (hier: Disklaufwerk, CDROM, Festplatte)
Das hört sich für mich nach einer Konfigurationssache (PATH) der Umgebungsvariablen an, die die einzelnen Webserver auf den verschiedenen Maschinen setzen sollten.
- Wie kann ich das OS feststellen, auf dem die Sache läuft?
Mit php_uname()
- Kann ich für den Befehlsinterpreter auf eine Systemvariable zurückgreifen, oder ihn anders ermitteln?
Da würde ich das Script so einstellen, daß es per Erstaufruf $_ENV['PATH'] parst und mit einem Datenfeld an möglichen Interpreternamen sich auf die Suchen macht, bis es einen Interpreter gefunden hat. Die genau Pfadangabe zum Interpreter hinterlegt sich das Script in einem kleinen Konfigurationsfile und greift fortan darauf zurück.
Gruß aus Berlin!
eddi
Hello,
Da würde ich das Script so einstellen, daß es per Erstaufruf $_ENV['PATH'] parst und mit einem Datenfeld an möglichen Interpreternamen sich auf die Suchen macht, bis es einen Interpreter gefunden hat. Die genau Pfadangabe zum Interpreter hinterlegt sich das Script in einem kleinen Konfigurationsfile und greift fortan darauf zurück.
Ja, das hört sich gut an. Hatte ich´mir auch gerade überlegt, als ich merkte, dass es doch nicht klappt. Jetzt muss ich erstmal Eure anderen Tipps verfolgen, um vielleicht doch noch herauszubekommen, woran es liegt.
Ich hatte zwischenzeitlich auf dem Win98SE-Host die Shell auch schon mit qualifiziertem Pfad angegeben, das hilft aber auch nicht.
Ich habe auch den Eindruck, dass der Prozess nur nachschaut, ob eine Diskette vorhanden ist. Es wird scheinbar aber nicht darauf gelesen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo Tom
- Kann ich für den Befehlsinterpreter auf eine Systemvariable zurückgreifen, oder ihn anders ermitteln?
Unter den Betriebssystemen von Microsoft sollte Dir die Umgebungsvariable
COMSPEC
weiterhelfen. Bitte beachte, dass die Schreibweise der Umgebungsvariablen sowohl unter COMMAND.COM als auch unter CMD.EXE nicht case-sensitive ist.
Freundliche Grüße
Vinzenz