| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

10-11-2010, 10:38
|
|
MatzeK
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 6
|
|
system()-Funktion liefert 1 zurück, bei Skripten auf UNC-Pfad
Hallo,
ich habe folgendes Problem mit der system()-Funktion von PHP und allen anderen System-Funktionen, wie exec, shell_exec oder passthru.
Unsere PHP-Umgebung ist load balanced über den Apache 2.2 Webserver, die DocumentRoot ist auf einen UNC-Pfad eingestellt um kein Mirroring der PHP-Skripte zu benötigen.
Leider hat diese Konfiguration zur Folge, dass die system()-Funktion nicht mehr ausgeführt werden kann. Der return_value liefert immer nur eine 1 zurück. Ändere ich die DocumentRoot auf ein lokales Laufwerk, funktioniert alles wie erwartet.
Hat jemand schon ein ähnliches Verhalten gehabt und eine Lösung dafür?
MatzeK
|

10-11-2010, 11:07
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Eine 1 geben diese Funktionen nicht von sich aus zurück. Das ist also tatsächlich das Ergebnis deines Shell-Kommandos. Welches wäre das bitte?
Funktioniert es denn überhaupt, wenn du es direkt im Terminal ausführst?
Funktioniert es auch, wenn du es als der Webserver-User ausführst?
|

10-11-2010, 11:23
|
|
MatzeK
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 6
|
|
Es ist nicht die Rückgabe des Shell-Befehls, denn es ist egal, welchen Shell-Befehl ich eingebe. Ob 'PING', oder 'IPCONFIG' oder eine *.bat-Datei mit einem robocopy-Befehl, der return_value von system() ist immer 1.
Die Shell-Befehle funktionieren alle auf der Konsole direkt, auch mit dem Webserver-User. Nur in der Webserver-Umgebung mit der DocumentRoot als UNC-Pfad, also beim Aufruf im Browser, geht es nicht.
Es handlet sich übrigens um Windows Server.
|

10-11-2010, 11:48
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Error_reporting aufgedreht? Safe_Mode aus? Typ des Rückgabewerts geprüft? Errorlogs gelesen?
Werden die Kommandos denn ausgeführt und nur der Return Value stimmt nicht?
Vielleicht findet der Webserver das Shell-Binary nicht. Kopiere es (cmd.exe?) mal ins Arbeitsverzeichnis.
|

10-11-2010, 12:12
|
|
MatzeK
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 6
|
|
Danke für die schnellen Antworten.
Jep, Error_reporting schon aufgedreht, safe_mode ist aus, keine Einträge in den Error_logs, weder PHP noch Apache. Typ des Return values ist integer.
Hab gerade nochmal die cmd.exe in das Verzeichnis des Skriptes gelegt, und auch das funktioniert leider nicht.
Die Shell-Befehle werden nicht ausgeführt. Die 1 als Return Value scheint also ein Fehlercode zu sein.
Es scheint so, als würde er versuchen die cmd.exe auf dem UNC-Pfad aufzurufen, anstatt die lokale zu nutzen, kann dies aber nicht, weil es ja einem Remote-Zugriff gleich käme.
Ich habe auf php.net im Manual zur system()-Funktion in den Kommentaren eine Funktion (runAsynchronously) gefunden, die die COM-Schnittstelle benutzt. Diese funktioniert hier auch. Das Ganze ist jedoch sehr unbefriedigend, da ich in allen Skripten die system()-Funktion etc. durch diese Funktion austauschen müsste, auch in PEAR-Klassen. Bei einem PEAR-Update würde diese manuelle Änderung aber wieder überschrieben werden.
|

10-11-2010, 12:23
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Mit der Funkortung Extension könntest du system() und Kollegen durch eigene Funktionen ersetzen.
Schon mal in den Sourcen von PHP nachgesehen wann diese 1 zurück gegeben wird, bei welchem Fehler? Wenn man weiß was PHP da gerade versucht, könnte man evtl. einen sauberen Workaround finden.
|

10-11-2010, 12:27
|
|
MatzeK
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 6
|
|
Die Funkortung Extension kenne ich nicht, kannst Du mir da ein Beispiel geben?
In den Sourcen von PHP hab ich noch nie nachgeschaut, wie mache ich das denn?
|

10-11-2010, 12:30
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Nicht Funkortung, ich meinte runkit. Blöde Rechtschreibkorrektur.
|

10-11-2010, 14:18
|
|
MatzeK
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 6
|
|
Leider gibt es keine dll für die runkit Erweiterung...
Und an das reinkompilieren in PHP traue ich mich nicht wirklich ran im Moment.
|

10-11-2010, 15:07
|
|
MatzeK
Registrierter Benutzer
|
|
Registriert seit: Nov 2010
Beiträge: 6
|
|
Ich hab gerade mal in den PHP Sources nachgeschaut und nichts zu dem Return Value 1 gefunden.
Hat noch jemand ne gute Idee?
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|