Lassen Sie mich dies vorwegnehmen, indem Sie sagen, dass dies eine äußerst allgemeine und vereinfachte Ansicht dessen ist, was passiert.
Webserver-Software (wie Apache oder IIS) interpretiert keinen Code. es weiß nicht wie. Alles, was es zu tun weiß, ist, eine Anfrage entgegenzunehmen, sie an einer Stelle im Dateisystem nachzuschlagen und das angeforderte Element dann an den Browser zurückzusenden. Das ist alles, was es tut - auf einer sehr einfachen Ebene. Aus diesem Grund erhalten Sie bei der Installation von Apache und dem Hinzufügen einer PHP-Datei zu DocumentRoot
nicht das ausgeführte PHP-Ergebnis. nur die Datei zurück.
Der erste Schritt, um den Server dazu zu bringen, etwas anderes als Served-Dateien auszuführen, besteht darin, Code hinzuzufügen, der ihn anweist, etwas anderes zu tun, wenn eine bestimmte Datei angefordert wird. Andernfalls wird lediglich versucht, die Datei gemäß ihrem Standard-MIME-Typ (normalerweise Text / Nur-Text) bereitzustellen. Aus diesem Grund wird bei einem falsch konfigurierten Server und bei der Anforderung index.php
der Quellcode für die Datei anstelle des beabsichtigten Ergebnisses angezeigt.
Damit ein Webserver PHP "versteht", müssen Sie ihm mitteilen, was zu tun ist, wenn eine Anforderung für eine Datei mit der .php
Erweiterung mod_php
eingeht . Hier kommt sie an. Dieses Modul verlagert die Anforderung an einen PHP-Interpreter (wie es geht) kann das konfiguriert werden), der dann die Datei liest, den Code ausführt, die Ergebnisse kompiliert; und sendet die Ergebnisse zurück an den Server, der wiederum die Ergebnisse an den Client liefert. Anschließend konfigurieren Sie den Webserver so, dass alle Dateien mit .php am Ende von mod_php verarbeitet werden.
Dieser grundlegende Workflow wird auch in anderen Sprachen angewendet. Der einzige Unterschied besteht darin, wohin der Server die Anforderung "auslagert".
Der Fall für PHP ist oben erläutert, gibt es in ähnlicher Weise mod_python
, und fastcgi
, wsgi
und andere etablierte Protokolle auf Offloading - Anfragen , dass ein Web - Server ist nicht zu handhaben gestaltet.
Die meisten gängigen Implementierungen haben einen lang laufenden Prozess, der auf eine Anforderung an einem bestimmten Port (oder Socket) wartet. Der Webserver wird dann als Proxy konfiguriert , sodass alle Anforderungen, die einem bestimmten Muster entsprechen, an diesen lang laufenden Prozess übergeben und die Ergebnisse zurückgelesen werden.
So funktionieren Ruby on Rails (Rack) und Python-Skripte (mit WSGI).
Dies ist auch der Grund, warum einfache Proxy-ähnliche Webserver wie Nginx sehr beliebt sind. Sie erledigen nur die grundlegenden Aufgaben eines herkömmlichen Webservers - stellen die "statischen" Dateien bereit und können Anforderungen sehr gut an andere Proxyserver auslagern, um Dinge wie PHP, Python, ASP usw. zu erledigen. al.
Am Ende haben Sie also den Webserver, der sich um die statischen Dateien kümmert, alles, was nicht verarbeitet werden muss.
Sie haben einen anderen Prozess, der mit Ihrem Code umgehen kann (z. B. einen Prozess, auf dem der PHP-Interpreter ausgeführt wird, oder einen uWSGI-Server). Dies sitzt und wartet auf Anfragen vom Webserver.
Schließlich haben Sie Systeme wie Upstart und Supervisor, die diese Prozesse für Sie verwalten.
Hoffe das klärt die Sache.