Was ist mod_php?

107

Beim Durchlaufen eines Zend-Tutorials bin ich auf folgende Aussage gestoßen:

Beachten Sie, dass die php_flag-Einstellungen in .htaccess nur funktionieren, wenn Sie mod_php verwenden.

Kann jemand erklären, was das bedeutet?

SpikETidE
quelle

Antworten:

157

mod_phpbedeutet PHP als Apache-Modul .

Grundsätzlich mod_phpermöglicht es Apache beim Laden als Apache-Modul, PHP-Dateien zu interpretieren (diese werden von interpretiert mod_php) .


BEARBEITEN: Bei der Arbeit mit Apache gibt es (mindestens) zwei Möglichkeiten, PHP auszuführen:

  • Verwenden von CGI : Ein PHP-Prozess wird von Apache gestartet, und dieser PHP-Prozess interpretiert PHP-Code - nicht Apache selbst
  • Verwenden von PHP als Apache-Modul (aufgerufen mod_php) : Der PHP-Interpreter ist dann irgendwie in den Apache-Prozess "eingebettet": Es gibt keinen externen PHP-Prozess - was bedeutet, dass Apache und PHP besser kommunizieren können .


Und nach dem Kommentar erneut bearbeiten : Verwenden von CGI oder mod_phpliegt bei Ihnen: Es ist nur eine Frage der Konfiguration Ihres Webservers.

Um zu wissen, welcher Weg derzeit auf Ihrem Server verwendet wird, können Sie die Ausgabe von überprüfen phpinfo(): Es sollte etwas geben, das angibt, ob PHP über mod_php (oder mod_php5) oder über CGI ausgeführt wird.

Vielleicht möchten Sie auch einen Blick auf die php_sapi_name()Funktion werfen : Sie gibt den Schnittstellentyp zwischen Webserver und PHP zurück .


Wenn Sie bei der Verwendung die Konfigurationsdateien Ihres Apache einchecken mod_php, sollte eine LoadModuleZeile wie folgt aussehen:

LoadModule php5_module        modules/libphp5.so

(Der Dateiname auf der rechten Seite kann unterschiedlich sein - unter Windows sollte es beispielsweise a sein. .dll)

Pascal MARTIN
quelle
Ich habe xampp verwendet, um das PHP-, Apache- und MySQL-Paket zu installieren. Wie wird mein Setup aussehen?
SpikETidE
Sie sollten es aktivieren, wenn PHP derzeit nicht funktioniert. Wenn PHP bereits funktioniert, muss CGI verwendet werden. In diesem Fall müssen Sie wahrscheinlich mehr tun, als nur das Modul zu aktivieren. Das Modul ist möglicherweise nicht einmal im System vorhanden.
d11wtq
1
Jep..!. Wenn ich phpinfo () starte, sehe ich, dass mod_php5 im Abschnitt Loaded Modules enthalten ist. Und das bedeutet, dass ich es als Apache-Modul laufen lasse ... richtig?
SpikETidE
3
mod_phpist bei weitem die häufigste Konfiguration.
Troelskn
@Pascal, ich würde sagen, mod_phpist nicht echtes PHP; Es ist nur ein Apache-Addon. Oder besser gesagt, ich denke, Sie sollten die Antwort mit einer Definition von Was genau bedeutet PHP beginnen?
Pacerier
58

Diese Antwort stammt von TuxRadar :

Wenn Sie PHP über Ihren Webserver ausführen, gibt es zwei verschiedene Optionen: Ausführen mit PHPs CGI SAPI oder Ausführen als Modul für den Webserver. Jeder hat seine eigenen Vorteile, aber insgesamt wird das Modul im Allgemeinen bevorzugt.

Das Ausführen von PHP als CGI bedeutet, dass Sie Ihrem Webserver im Grunde den Speicherort der ausführbaren PHP-Datei mitteilen und der Server diese ausführbare Datei ausführt und ihm bei jedem Besuch einer Seite das von Ihnen aufgerufene Skript gibt. Das bedeutet, dass PHP jedes Mal, wenn Sie eine Seite laden, die php.ini lesen und ihre Einstellungen festlegen muss, alle Erweiterungen laden muss und dann mit dem Parsen des Skripts beginnen muss - es gibt viele wiederholte Arbeiten.

Wenn Sie PHP als Modul ausführen, befindet sich PHP buchstäblich in Ihrem Webserver - es startet nur einmal, lädt seine Einstellungen und Erweiterungen nur einmal und kann auch Informationen über Sitzungen hinweg speichern. Beispielsweise verlassen sich PHP-Beschleuniger darauf, dass PHP zwischengespeicherte Daten über Anforderungen hinweg speichern kann, was mit der CGI-Version nicht möglich ist.

Der offensichtliche Vorteil der Verwendung von PHP als Modul ist die Geschwindigkeit - Sie werden einen großen Geschwindigkeitsschub sehen, wenn Sie von CGI zu einem Modul konvertieren. Viele Leute, insbesondere Windows-Benutzer, erkennen dies nicht und verwenden weiterhin das CGI SAPI php.exe, was eine Schande ist - das Modul ist normalerweise drei- bis fünfmal schneller.

Die Verwendung der CGI-Version bietet jedoch einen entscheidenden Vorteil: PHP liest die Einstellungen jedes Mal, wenn Sie eine Seite laden. Wenn PHP als Modul ausgeführt wird, werden alle Änderungen, die Sie an der Datei php.ini vornehmen, erst nach einem Neustart Ihres Webservers wirksam. Daher ist die CGI-Version vorzuziehen, wenn Sie viele neue Einstellungen testen und sofortige Antworten sehen möchten.

SpikETidE
quelle
@JohannEchavarria, Wenn Sie nicht viele verrückte Dinge hinzugefügt haben, dauert ein Neustart des Servers nur wenige Sekunden. Für "normale" moderne Systeme mit SSD sind es weniger als 2 Sekunden.
Pacerier
12

Auf Ihrem Server müssen die PHP-Module installiert sein, damit er PHP-Code analysieren kann.

Wenn Sie auf Ubuntu sind, können Sie dies einfach mit tun

sudo apt-get install apache2

sudo apt-get install php5

sudo apt-get install libapache2-mod-php5

sudo /etc/init.d/apache2 restart

Andernfalls können Sie Apache mit PHP kompilieren: http://dan.drydog.com/apache2php.html

Wenn Sie Ihr Server-Betriebssystem angeben, können andere Personen genauer antworten.

cdated
quelle
5

Dies bedeutet, dass Sie PHP als Modul in Apache installiert haben müssen, anstatt es als CGI-Skript zu starten.

Ondrej Slinták
quelle
3

Nur um diese Antworten hinzuzufügen, ist mod_php die älteste und langsamste Methode, die auf dem HTTPD-Server zur Verwendung von PHP verfügbar ist. Es wird nicht empfohlen, es sei denn, Sie verwenden alte Versionen von Apache HTTPD und PHP. php-fpm und proxy_cgi sind die bevorzugten Methoden.

Tejas Sarade
quelle
0

mod_php ist ein PHP-Interpreter.

Ein wichtiger Haken von mod_php in der Dokumentation ist:

"mod_php ist nicht threadsicher und zwingt Sie, sich an die Prefork-MPM (Multi-Prozess, keine Threads) zu halten, die die langsamstmögliche Konfiguration darstellt."

kta
quelle