Zum Inhalt springen

externes Programm starten


Empfohlene Beiträge

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 :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...