Zum Inhalt springen

scriptit

Mitglieder
  • Gesamte Inhalte

    2
  • Benutzer seit

  • Letzter Besuch

  1. 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
  2. Moin, ich habe ein ähnliches Problem... Um einen externen Prozess aus php aufrufen zu können und diese voneinander zu entkoppeln, habe ich mit CreateProzess() ein kurzes Programm gestrickt. #include <windows.h> #include <iostream> #include <string> using namespace std; int main(int argc, char* argv[]) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( π, sizeof(pi) ); // Start the child process. if( !CreateProcess( NULL, // No module name (use command line). "externer Prozess", // Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent's environment block. NULL, // Use parent's starting directory. &si, // Pointer to STARTUPINFO structure. π ) // Pointer to PROCESS_INFORMATION structure. ) { //ErrorExit( "CreateProcess failed." ); } CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); return 0; } Bis dahin funktioniert alles super - aber ich brauche das etwas dynamischer! Jetzt würde ich das Programm gerne mit einem Übergabeparameter (string) aufrufen, der den Aufruf für den Aufzurufenden Prozess enthält... Das Array argv[] enthällt zwar alle Übergabeparameter, aber wie kann ich die in den CreateProzess() einbinden/übergeben??? Kann mir dazu jemand einen Tipp geben? Danke

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...