Heim  >  Artikel  >  Backend-Entwicklung  >  PHP verfügt über mehrere Betriebsmodi

PHP verfügt über mehrere Betriebsmodi

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼Original
2019-09-25 11:54:483092Durchsuche

PHP verfügt über mehrere Betriebsmodi

Über die fünf gängigen Betriebsmodi von PHP:

(1) CGI (Common Gateway Interface)

(2 ) FastCGI (Resident CGI/Long-Live CGI)

(3) CLI (Command Line Run/Command Line Interface)

(4) Webmodulmodus ( Der Modus, in dem Webserver wie z als Apache-Lauf)

(5) ISAPI (Internet Server Application Program Interface)

Hinweis: Nach PHP5.3 verfügt PHP nicht mehr über einen ISAPI-Modus und existiert nach der Installation auch nicht mehr Es gibt die Datei php5isapi.dll. Um eine höhere Version von PHP auf IIS6 zu verwenden, müssen Sie die FastCGI-Erweiterung installieren und dann IIS6 für die Unterstützung von FastCGI aktivieren.

1. CGI-Modus

CGI ist das Common Gateway Interface (Common Gateway Interface). Für den Laien ist es wie eine Brücke, die verbindet Webseiten sind mit dem Ausführungsprogramm im Webserver verbunden, übermitteln die von HTML empfangenen Anweisungen an das Ausführungsprogramm des Servers und geben dann die Ergebnisse des Ausführungsprogramms des Servers an die HTML-Seite zurück. CGI ist äußerst plattformübergreifend und kann auf fast jedem Betriebssystem implementiert werden. CGI ist bereits ein älteres Modell und wurde in den letzten Jahren nur noch selten eingesetzt.

Jedes Mal, wenn eine Benutzeranfrage vorliegt, wird zuerst ein CGI-Unterprozess erstellt, dann wird die Anfrage verarbeitet und der Unterprozess wird nach der Verarbeitung beendet. Dies ist der Fork. And-Execute-Modus. Wenn die Anzahl der Benutzeranforderungen sehr groß ist, werden große Mengen an Systemressourcen wie Speicher, CPU-Zeit usw. belegt, was zu einer geringen Leistung führt. Daher verfügt ein Server, der CGI verwendet, über so viele CGI-Unterprozesse wie Verbindungsanforderungen. Das wiederholte Laden von Unterprozessen ist der Hauptgrund für die geringe CGI-Leistung.

Wenn Sie PHP nicht in serverseitige Software (wie Apache) einbetten und als Modul installieren möchten, können Sie es im CGI-Modus installieren. Oder verwenden Sie PHP mit verschiedenen CGI-Wrappern, um sichere Chroot- und Setuid-Umgebungen für Ihren Code zu erstellen. Auf diese Weise fordert jeder Client eine PHP-Datei an, und der Webserver ruft php.exe (php.exe unter Win, php unter Linux) auf, um die Datei zu interpretieren, und gibt dann das Ergebnis der Interpretation in Form von an den Client zurück eine Webseite. Diese Installationsmethode installiert normalerweise die ausführbare PHP-Datei im cgi-bin-Verzeichnis des Webservers. Die CERT-Empfehlung CA-96.11 empfiehlt, keine Interpreter im cgi-bin-Verzeichnis abzulegen. Der Vorteil dieser Methode besteht darin, dass sie den Webserver von der spezifischen Programmverarbeitung trennt, eine klare Struktur und eine starke Kontrollierbarkeit aufweist. Gleichzeitig besteht der Nachteil darin, dass der CGI-Prozesszweig zu einem riesigen wird Stellen Sie sich vor, dass Hunderte von gleichzeitigen Anforderungen dazu führen, dass der Server Hunderte von Prozessen aufteilt, und Sie werden verstehen. Aus diesem Grund war CGI schon immer für seine geringe Leistung und seinen hohen Ressourcenverbrauch bekannt.

Verwandte Empfehlungen: „php-Einführungs-Tutorial

2. FastCGI-Modus

FastCGI ist ein Upgrade von Die CGI-Version ist wie ein langlebiges CGI. Sie kann immer ausgeführt werden, solange sie nicht jedes Mal aktiviert ist (dies ist der am meisten kritisierte Fork-and-Execute-Modus).

FastCGI ist eine skalierbare Hochgeschwindigkeits-Kommunikationsschnittstelle zwischen HTTP-Servern und dynamischen Skriptsprachen. Die meisten gängigen HTTP-Server unterstützen FastCGI, darunter Apache, Nginx und lighttpd. Gleichzeitig wird FastCGI auch von vielen Skriptsprachen unterstützt, darunter PHP.

Der FastCGI-Schnittstellenmodus verwendet eine C/S-Struktur, die den HTTP-Server und den Skript-Parsing-Server trennen und einen oder mehrere Skript-Parsing-Daemons auf dem Skript-Parsing-Server starten kann. Jedes Mal, wenn der HTTP-Server auf ein dynamisches Programm trifft, kann es zur Ausführung direkt an den FastCGI-Prozess übermittelt und das Ergebnis dann an den Browser zurückgegeben werden. Mit dieser Methode kann der HTTP-Server ausschließlich statische Anforderungen verarbeiten oder die Ergebnisse des dynamischen Skriptservers an den Client zurückgeben, was die Leistung des gesamten Anwendungssystems erheblich verbessert.

[Prinzip]

(1) Laden Sie den FastCGI-Prozessmanager (IIS ISAPI oder Apache-Modul), wenn der Webserver startet

(2 ) Der FastCGI-Prozessmanager initialisiert sich selbst, startet mehrere CGI-Interpreterprozesse (sichtbar mehrere php-cgi.exe oder php-cig) und wartet auf Verbindungen vom Webserver

(3) Wenn der Client dies anfordert Der FastCGI-Prozessmanager wählt einen Webserver aus und stellt eine Verbindung zu einem CGI-Interpreter her. Der Webserver sendet die CGI-Umgebungsvariablen und Standardeingaben an den FastCGI-Unterprozess php-cgi

(4) Nachdem der FastCGI-Unterprozess die Verarbeitung abgeschlossen hat, gibt er die Standardausgabe und Fehlerinformationen an das Web zurück Server aus derselben Verbindung. Wenn der untergeordnete FastCGI-Prozess die Verbindung schließt, wird die Anfrage verarbeitet. Der untergeordnete FastCGI-Prozess wartet dann auf die nächste Verbindung vom FastCGI-Prozessmanager (der in WebServer ausgeführt wird) und verarbeitet diese. Im normalen CGI-Modus wird php-cgi.exe hier beendet.

Im CGI-Modus können Sie sich vorstellen, wie langsam CGI normalerweise ist. Jede Webanfrage an PHP muss php.ini neu analysieren, alle DLL-Erweiterungen neu laden und alle Datenstrukturen neu initialisieren. Bei FastCGI geschieht dies alles nur einmal, nämlich beim Start des Prozesses. Ein zusätzlicher Bonus besteht darin, dass dauerhafte Datenbankverbindungen funktionieren.

备注:PHP的FastCGI进程管理器是PHP-FPM(PHP-FastCGI Process Manager)

【优点】

(1)从稳定性上看,FastCGI是以独立的进程池来运行CGI,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑; 

(2)从安全性上看,FastCGI支持分布式运算。FastCGI和宿主的Server完全独立,FastCGI怎么down也不会把Server搞垮; 

(3)从性能上看,FastCGI把动态逻辑的处理从Server中分离出来,大负荷的IO处理还是留给宿主Server,这样宿主Server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分,大量的是图片等静态。   

【缺点】 

说完了好处,也来说说缺点。从我的实际使用来看,用FastCGI模式更适合生产环境的服务器。但对于开发用机器来说就不太合适。因为当使用 Zend Studio调试程序时,由于 FastCGI会认为 PHP进程超时,从而在页面返回 500错误。这一点让人非常恼火,所以我在开发机器上还是换回了 ISAPI模式。对某些服务器的新版本支持不好,对分布式负载均衡没要求的模块化安装是否是更好的选择。目前的FastCGI和Server沟通还不够智能,一个FastCGI进程如果执行时间过长会被当成是死进程杀掉重起,这样在处理长时间任务的时候很麻烦,这样做也使得FastCGI无法允许联机调试。因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。

三、CLI模式

PHP-CLI是PHP Command Line Interface的简称,如同它名字的意思,就是PHP在命令行运行的接口,区别于在Web服务器上运行的PHP环境(PHP-CGI,ISAPI等)。 也就是说,PHP不单可以写前台网页,它还可以用来写后台的程序。 PHP的CLI Shell脚本适用于所有的PHP优势,使创建要么支持脚本或系统甚至与GUI应用程序的服务端,在Windows和Linux下都是支持PHP-CLI模式的。

【优点】 

(1)使用多进程,子进程结束以后,内核会负责回收资源; 

(2)使用多进程,子进程异常退出不会导致整个进程Thread退出,父进程还有机会重建流程; 

(3)一个常驻主进程,只负责任务分发,逻辑更清楚。 

我们在Linux下经常使用"php –m"查找PHP安装了那些扩展就是PHP命令行运行模式;有兴趣的同学可以输入"php –h"去深入研究该运行模式。 

四、模块模式 

模块模式是以mod_php5模块的形式集成,此时mod_php5模块的作用是接收Apache传递过来的PHP文件请求,并处理这些请求,然后将处理后的结果返回给Apache。如果我们在Apache启动前在其配置文件中配置好了PHP模块(mod_php5),PHP模块通过注册apache2的ap_hook_post_config挂钩,在Apache启动的时候启动此模块以接受PHP文件的请求。 

除了这种启动时的加载方式,Apache的模块可以在运行的时候动态装载,这意味着对服务器可以进行功能扩展而不需要重新对源代码进行编译,甚至根本不需要停止服务器。我们所需要做的仅仅是给服务器发送信号HUP或者AP_SIG_GRACEFUL通知服务器重新载入模块。但是在动态加载之前,我们需要将模块编译成为动态链接库。此时的动态加载就是加载动态链接库。 Apache中对动态链接库的处理是通过模块mod_so来完成的,因此mod_so模块不能被动态加载,它只能被静态编译进Apache的核心。这意味着它是随着Apache一起启动的。 

Apache是如何加载模块的呢?我们以前面提到的mod_php5模块为例。首先我们需要在Apache的配置文件httpd.conf中添加一行:

LoadModule php5_module modules/mod_php5.so

这里我们使用了LoadModule命令,该命令的第一个参数是模块的名称,名称可以在模块实现的源码中找到。第二个选项是该模块所处的路径。如果需要在服务器运行时加载模块,可以通过发送信号HUP或者AP_SIG_GRACEFUL给服务器,一旦接受到该信号,Apache将重新装载模块,而不需要重新启动服务器。 

该运行模式是我们以前在windows环境下使用apache服务器经常使用的,而在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。(它是apache在CGI的基础上进行的一种扩展,加快PHP的运行效率)。

五、ISAPI模式 

ISAPI (Internet Server Application Program Interface) ist eine Reihe von API-Schnittstellen für Internetdienste, die von Microsoft bereitgestellt werden. Eine ISAPI-DLL kann sich im Speicher befinden, nachdem sie durch eine Benutzeranforderung aktiviert wurde, auf eine andere Benutzeranforderung warten und auch verwendet werden In einer DLL sind mehrere Benutzeranforderungsverarbeitungsfunktionen eingerichtet. Darüber hinaus befinden sich die ISAPI-DLL-Anwendung und der WWW-Server im selben Prozess, und die Effizienz ist deutlich höher als bei CGI. (Aufgrund der Exklusivität von Microsoft kann es nur in der Windows-Umgebung ausgeführt werden)

PHP ist ein Apache-Modul. Nachdem der Apache-Server das System gestartet hat, generiert es vorab mehrere Prozesskopien und befindet sich im Speicher Sobald eine Anfrage auftritt, werden diese inaktiven Teilprozesse sofort zur Verarbeitung verwendet, sodass keine Verzögerung durch die Generierung von Teilprozessen entsteht. Diese Serverkopien werden nicht sofort nach der Verarbeitung einer HTTP-Anfrage beendet, sondern bleiben auf dem Computer und warten auf die nächste Anfrage. Die Reaktion auf Client-Browseranfragen ist schneller und die Leistung ist höher.

Das obige ist der detaillierte Inhalt vonPHP verfügt über mehrere Betriebsmodi. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn