scriptit Geschrieben 24. März 2005 Teilen Geschrieben 24. März 2005 Moin, ich habe ein interessantes Problem und vielleicht kann mir hier jemand helfen. Problemstellung: Ich will mit einem PHP Skript ein externe Programm auf einem Webserver (Windows 2003Server) starten und anschließend soll das Skript weiter ausgeführt werden. Das externe Programm soll aber länger laufen, als das PHP Skript... Lösung: Ein direkter Aufruf des Programms mit shell_exec() führt zu einem timeout im Skript -> Das Skript wartet auf die Rückgabe des externen Programms, bevor es weiter läuft. Gleiche Ergebnisse liefern auch exec(), system(), passthru() und popen() Also habe ich ein kleines Programm geschreiben (VB6), dem ich beim Aufruf das externe Programm als Parameter mitgebe.shell_exec('IsEgal.exe ' . $str); Nach dem Start des Programms beendet sich das "Startprogramm" und PHP sollte die erwartet Rückgabe bekommen und das Skript weiter ausführen. So weit, so gut. Bei mir lokal (WinXPP & XAMPP) läuft das auch prima . Aber auf dem Server leider nicht... Dort wird das "Startprogramm" ausgeführt, des externe Programm gestartet und das "Startprogramm" beendet sich selbst, aber das Skript läuft nicht weiter! :confused: Hängt das mit den Prozessen (Father/Child) zusammen, oder warum bekomme ich auf dem Webserver nicht die erwartet Rückgabe? Nach 30sec (Standart) bekomme ich vom Browser einen Timeout, aber mein Skript läuft eben nicht weiter... Oder hat jemand eine andere Idee, wie ich das externe Programm aufrufen kann?!?! Danke, schöne Ostern & dicke Eier Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
xmurrix Geschrieben 24. März 2005 Teilen Geschrieben 24. März 2005 Hallo, du führst über PHP ein VB-Prog aus, welches wiederum ein andere Exe ausführt. Jeder Prozess der über einen Webserver gestartet wird, läuft mit dem IIS-User Account (wenn der Webser ein IIS) ist. Dieser User sollte niemals eine Berechtigung haben, auf die Kommandozeile zuzugreifen - Das ist ein Sicherheitsrisiko. Außerdem wird jeder Prozess, der über PHP aufgerufen wird, in den Timeout laufen, dabei spielt es keine Rolle, ob man das Programm direkt mit PHP aufruft, oder über den Umweg, den du gehst. Das externe Programm soll ja länger laufen als das PHP-Script. Besser wäre folgende Lösung: 1. Das PHP-Script erstellt in einem Verzeichnis eine Dummy-Datei, z. B. dummy.txt. 2. Auf dem Server läuft das externe Programm als Dienst, welches in einem bestimmten intervall überprüft, ob in diesem Verzeichnis eine dummy.txt existiert. Wenn ja, wird die zu erledigende Arbeit ausgeführt und die dummy.txt gelöscht. oder: Das Verzeichnis wird mittels Active-Directory überwacht. Sobald das PHP-Script die dummy.txt erstellt, wird das Ereignis dafür verwendet, um das Programm auszuführen. Habe aber wenig Erfahrung mit Active-Directory um dier die Vorgehensweise genau zu erklären, soweit ich das weis ist sowas damit machbar. Gruß xmurrix Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.