Unterschied PHP Modul/CGI

Moin!

Meines Wissens ist der Unterschied zwischen PHP als Modul und PHP per CGI der, dass PHP als Modul ein Teil des Apache-Servers ist und somit im selben Programm/Prozess verarbeitet wird und bei PHP per CGI der PHP-Interpreter als externes Programm aufgerufen und dem die Seite übergeben wird, und der die dann wieder zurück an den Server gibt, bevor sie ausgeliefert ist.

Das ist grundsätzlich eine Frage der Geschwindigkeit. PHP als Modul sollte deutlich schneller sein als per CGI.

Meine Frage: Gibt es sonst signifikante Unterschiede zwischen PHP als Modul und PHP per CGI?

Danke,
-Efchen

Hallo

Erstens muss man unterscheiden zwischen CGI, wo für jeden Seitenaufruf ein neuer PHP-Prozess gestartet wird und Fast-CGI, wo der PHP-Prozess wiederverwendet wird.
Fast-CGI ist mit den richtigen Einstellungen nur geringfügig langsamer als das Apache-Modul. (http://www.debianroot.de/server/benchmark-apache2-mi…)

Die Modul-Variante hat folgende Nachteile:
* Alle PHP-Scripts laufen mit den gleichen Rechten wie der Webserver. Aus Sicherheitsgründen sollten sämtliche Funktionen für Befehlsausführung wie system() und exec() gesperrt werden, um Zugriffe auf Systemeinstellungen und andere VHosts zu unterbinden. Außerdem kommt es zu Rechteproblemen weil FTP und SCP in der Regel mit den einzelnen Benutzerkonten arbeiten.
* Einige PHP-Erweiterungen sind nicht threadsave, weshalb dann auch der Apache keine Threads verwenden kann, was zu Geschwindigkeitseinbußen (auch für reine HTML-Seiten) führt.

Auf einem Produktivserver würde ich Fast-CGI verwenden, vor allem bei mehreren Benutzerkonten.

Gruß, sigterm

Hallo,

und danke. Das hat mir sehr geholfen. FastCGI kannte ich noch nicht.

Schönes Wochenende,
-Efchen

Abgesehen von den Geschwindigkeitsunterschieden - die sich aber meist nur bei stark frequentierten Seiten bemerkbar machen - ist der größte Unterschied sicherlich der, dass man keinen Zugriff auf die Funktionen der Apache-Erweiterung hat: http://de.php.net/manual/de/book.apache.php

Aber das selbe gilt natürlich auch für die IIS-Funktionen, die man bei einem Apache-Modul auch nicht hat :wink:

Ob CGI gegenüber einem Modul eine größere oder kleinere Sicherheitslücke darstellt ist mir allerdings nicht bekannt.

Funktionstechnisch sollte es keine Unterschiede geben - sofern die gleichen Module installiert sind.