Diese Funktion führt ein externes Programm aus. Der Parameter s_timeout wird (vorläufig) nur unter Win9x / WinNT ausgewertet. Das aufgerufene Programm wird komplett ausgeführt und gibt dann die Kontrolle an das CGI-Programm zurück. Das aufgerufene Programm erhält die Ein- und Ausgabeströme des CGI-Programms. Deshalb sollte vor der Ausführung die Ausgabe-Pufferung beendet werden (da das externe Programm nicht in den tdbengine-Puffer schreiben kann).
Besonderheiten Win9x, WinNT:
Das Programm wird direkt gestartet. Mit s_timeout kann die maximal verfügbare Zeit (in Sekunden) angegeben werden. Wird dann das Programm vorzeitig abgebrochen, ist der Funktionswert -1. Wird für s_timeout der Wert -1 angegeben, so wird das Programm zwar komplett ausgeführt, die Ausgabe jedoch unterdrückt. Diese Vorgegensweise ist der Ausgabeumleitung in jedem Fall vorzuziehen. Die Rechte des ausgeführten Programms werden aus den Rechten des Internet-Klienten abgeleitet.
Beispiel:
richtig: (pkzip25.exe befindet sich in /home/tdbengine/)
CGICloseBuffer .. Puffer leeren
CGIExec('pkzip25.exe -add backup.zip *') .. zeigt die gesamte Liste
.. und erzeugt backup.zip im CGI-Verzeichnis
richtig: (cmd.exe befindet sich in /home/tdbengine/)
...
CGIExec('cmd.exe /c set') .. zeigt das gesamte Environment
falsch: (cmd.exe und pkzip25 befinden sich in /home/tdbengine/)
...
CGIExec('cmd.exe /c pkzip25.exe -add backup.zip * > nul') .. erzeugt backup.zip ohne
Ausgabe
richtig: (pkzip25.exe befindet sich in /home/tdbengine/)
CGIExec('pkzip25.exe -add backup.zip *',-1) .. erzeugt backup.zip ohne Ausgabe
Einschränkung: CGIExec kann (zumindest problemlos) nur echte 32-Bit Anwendungen ausführen.
Linux:
Die commandline von CGIExec wird an die Shell des Internet-Klienten mit dessen Rechten übergeben. Hinweis: Hier ist die Ausgabeumleitung der empfohlene Weg, die Ausgaben des aufgerufenen Programms zu unterdrücken. Beispiel:
CGICloseBuffer .. Puffer leeren
CGIWrite('') .. Ausgabe entsprechend Bildschirm
CGIExec('set') .. zeigt das gesamte Environment
CGIWriteLn(' ')..CGIExec('tar -cz -fbackup.tar.gz *') .. erzeugt das Archiv backup.tar.gz mit Ausgabe....CGIExec('tar -cz -fbackup.tar.gz * > /dev/null') .. erzeugt das Archiv backup.tar.gz ohneAusgabe.. Hinweis: Sie sollten CGIExec immer mit besonderer Vorsicht einsetzen. Unterbinden Sie durch geeignete Semaphoren gleichzeitige Aufrufe (vor allem bei Archivierungsprogrammen). Bedenken Sie, daß jeder CGI-Prozess nur eine beschränkte Zeit zur Verfügung hat (im http-Server einstellbar).
|