Frage:
Was ist der Unterschied zwischen Scripten, die als CGI oder als Apache-Modul laufen? Welche Methode hat welche Vor- und Nachteile?
Erklärung:
CGI ist eine definierte Schnittstelle (common gateway interface) zwischen Apache und beliebigen Script-Sprachen (oder auch Programmen). Die Scripte werden von Apache gestartet, sobald ein Request darauf erfolgt. D.h. das erst nach dem Request der Interpreter geladen wird, dann das eigendliche Script, dieses in einen Byte-Code/Token-Form übersetzt und dann erst ausgeführt wird.
Apache-Module sind vom Apache vorgeladene Module. Der Interpreter steht also bereits im Speicher bereit und wird zwischen den Requests auch nicht beendet. Daher kann das Modul sich auch Zustände, Variablen, Datenbank-Verbindungen, etc. merken.
Daraus folgt natürlich, daß Scripte als Apache-Module meist schneller ausgeführt werden können als per CGI.
(Und bevor jetzt eine andere Diskussion los geht: Es sagt aber nichts
darüber aus, ob mod_php schneller/langsamer ist als Perl per CGI.)
Antwort:
Ich formulier es mal allgemein, da es neben mod_php auch mod_perl und mod_python gibt.
Vorteile als Modul: ("kann" heißt nicht, daß es das auch tut)
- Der Interpreter liegt im Speicher.
- Der Interpreter kann persistente DB-Connections halten.
- Der Interpreter kann den Byte-Code cachen.
- (Fast) vollen Zugriff auf Apache, seine Variablen und seinen Output.
- Besseres Handling eines 'Jails'. D.h. ein Script kann restrinktiver eingeschnürt werden.
Nachteile als Modul:
- Die Scripte laufen immer unter dem Apache-Benutzer.
- Konfiguration eines Moduls geht immer nur mit einem Neustart von Apache.
Vorteile als CGI:
- Per suExec können die Scripte unter einem anderen Benutzer laufen.
- Freie Interpreterwahl.
- Unbegrenzte Verarbeitungszeit (Timeout ist Client abhängig)
- Unbegrenzter Speicher.
(Die letzten Beiden könnten bei Massenhostern auch als negativ angesehen werden.)
Nachteile als CGI:
- Keine persistente DB-Connection.
- Keine Session-Übergreifende statische Variablen.
(Die Listen sind bei noch nicht vollständig.)