system()-Funktion liefert 1 zurück, bei Skripten auf UNC-Pfad

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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

  • #2
    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?

    Kommentar


    • #3
      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.

      Kommentar


      • #4
        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.

        Kommentar


        • #5
          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.

          Kommentar


          • #6
            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.

            Kommentar


            • #7
              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?

              Kommentar


              • #8
                Nicht Funkortung, ich meinte runkit. Blöde Rechtschreibkorrektur.

                Kommentar


                • #9
                  Leider gibt es keine dll für die runkit Erweiterung...
                  Und an das reinkompilieren in PHP traue ich mich nicht wirklich ran im Moment.

                  Kommentar


                  • #10
                    Ich hab gerade mal in den PHP Sources nachgeschaut und nichts zu dem Return Value 1 gefunden.

                    Hat noch jemand ne gute Idee?

                    Kommentar

                    Lädt...
                    X