von:http://www.jb51.net/article/37759.htm
1. PHP-Laufmodus in Apache
Es gibt drei PHP-Laufmodi in Apache Drei Arbeitsmodi: CGI-Modus, FastCGI-Modus, Apache-Modul-DLL
Vergleichen Sie Folgendes:
1. Vergleich zwischen CGI-Modus und Modulmodus:
Der Unterschied zwischen den beiden Arbeitsmethoden von PHP in Apache (CGI-Modus, Apache-Modul-DLL)
Installation dieser beiden Arbeitsmethoden:
Der CGI-Ansatz von PHP in Apache 2.0
ScriptAlias /php/ „c:/php/“
AddType application/x-httpd-php .php
Für PHP 4 verwenden Sie diese Zeile
Aktion application/x-httpd-php „/php/php.exe“
Für PHP 5 verwenden Sie diese Zeile
Action application/x-httpd-php „/php/php-cgi.exe“
PHP-Modulmodus in Apache 2.0
Verwenden Sie für PHP 4 diese beiden Zeilen:
LoadModule php4_module „c:/php/php4apache2.dll“
Vergessen Sie nicht Laden Sie es herunter. Kopieren Sie php4apache2.dll im Sapi-Verzeichnis!
AddType application/x-httpd-php .php
Für PHP 5 verwenden Sie diese beiden Zeilen:
LoadModule php5_module „c:/php/php5apache2.dll“
AddType application/x-httpd-php .php
Konfigurieren Sie den Pfad von php.ini
PHPIniDir „C:/php“
Der Unterschied zwischen diesen beiden Arbeitsmethoden:
Wenn der Client im CGI-Modus eine PHP-Datei anfordert, ruft der Webserver php.exe auf, um die Datei zu interpretieren, und gibt das Ergebnis der Interpretation dann in Form einer Webseite an den Client zurück
Bei Modular (DLL) wird PHP zusammen mit dem Webserver gestartet und ausgeführt.
Aus einer bestimmten Perspektive bietet PHP4, das im Apache-Modulmodus installiert ist, eine bessere Sicherheit sowie eine bessere Ausführungseffizienz und -geschwindigkeit als der CGI-Modus.
2. Analyse des FastCGI-Betriebsmodus:
So funktioniert FastCGI:
(1) Laden Sie den FastCGI-Prozessmanager, wenn der Webserver startet [PHPs FastCGI-Prozessmanager ist PHP-FPM (php-FastCGI-Prozessmanager)] (IIS ISAPI oder Apache-Modul);
(2) Der FastCGI-Prozessmanager initialisiert sich selbst, startet mehrere CGI-Interpreterprozesse (im Task-Manager sind mehrere php-cgi.exe zu sehen) und wartet auf die Verbindung vom Webserver.
(3) Wenn die Client-Anfrage den Webserver erreicht, wählt der FastCGI-Prozessmanager einen CGI-Interpreter aus und stellt eine Verbindung zu ihm her. Der Webserver sendet CGI-Umgebungsvariablen und Standardeingaben an den FastCGI-Unterprozess php-cgi.exe.
(4) Nachdem der FastCGI-Unterprozess die Verarbeitung abgeschlossen hat, gibt er über dieselbe Verbindung Standardausgabe- und Fehlerinformationen an den Webserver zurück. 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 obigen Fall 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.
(1) Sie können einen Multithread-CGI-Interpreter auf der Windows-Plattform ohnehin nicht stabil verwenden. Unabhängig davon, ob es sich um die IIS-ISAPI-Methode oder die APACHE-Modulmethode handelt, stürzen sie nach einiger Zeit immer ab. Ist es seltsam? Aber eine solche Situation gibt es!
Natürlich gibt es viele Fälle, in denen Sie einen Multithread-CGI-Interpreter stabil verwenden können. Wenn Sie jedoch zu FastCGI wechseln, kann es sein, dass die Webseite manchmal Fehler aufweist Die Anzahl solcher Fehler wird deutlich erhöht. Ich weiß nicht, warum das so ist, ich denke, dass der CGI-Interpreter mit unabhängigem Adressraum vielleicht doch etwas stabiler ist als die Form des gemeinsam genutzten Adressraums.
(2), Leistung! Leistung? Ist FastCGI möglicherweise schneller als ein Multithread-CGI-Interpreter? Aber manchmal ist es wahr und Sie können eine endgültige Schlussfolgerung nur ziehen, indem Sie Ihre Website testen. Der Grund ist meiner Meinung nach schwer zu sagen, aber es gibt Informationen, dass Zend in der Ära von Zend WinEnabler ursprünglich die Verwendung von FastCGI anstelle von IIS ISAPI oder dem Apache-Modul unter der Windows-Plattform empfohlen hat, aber jetzt stellt Zend dieses Produkt nicht mehr her.
Schließlich können Sie PHP5 und PHP4 gleichzeitig ausführen. Unter Bezugnahme auf die Konfigurationsdatei unten wurden zwei virtuelle Hosts erstellt, einer mit PHP5 und der andere mit PHP4.
Kopieren Sie den Code. Der Code lautet wie folgt:
LoadModule fastcgi_module module/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ „d:/usr/local/php-5.0.4/“
FastCgiServer „d:/usr/local/php-5.0.4/php-cgi.exe“ -Prozesse 3
ScriptAlias /fcgi-php4/ „d:/usr/local/php-4.3.11/“
FastCgiServer „d:/usr/local/php-4.3.11/php.exe“
Hören Sie 80
NameVirtualHost *:80
DocumentRoot d:/www
Optionen Indizes FollowSymlinks MultiViews
Servername php5.localhost
AddType application/x-httpd-fastphp5 .php
Aktion application/x-httpd-fastphp5 „/fcgi-php5/php-cgi.exe“
IndexOptions FancyIndexing FoldersFirst
Optionen Indizes FollowSymLinks MultiViews
AllowOverride None
Befehl erlauben, verweigern
Von allen zulassen
Listen 8080
NameVirtualHost *:8080
DocumentRoot d:/www
Optionen Indizes FollowSymlinks MultiViews
Servername php4.localhost
AddType application/x-httpd-fastphp4 .php
Aktion application/x-httpd-fastphp4 „/fcgi-php4/php.exe“
Optionen Indizes FollowSymLinks MultiViews
AllowOverride None
Befehl erlauben, verweigern
Von allen zulassen可以让不同的虚拟主机使用不同版本的 PHP.
说完了好处, 也来说说缺点.从我的实际使用来看, 用 FastCGI 模式更适合生产环境的服务器.但对于开发用机器来说就不太合适.因为当使用 Zend Studio 调试程序时,由于FastCGI ist eine PHP-Version von 500换回了 ISAPI 模式.
最后, 在 Windows 中以 FastCGI 模式存在潜在的安
二、php 在nginx 中运行模式(nginx PHP-FPM )目前理想选择
使用FastCGI方式现在常见的有两种Stack:ligthttpd spawn-fcgi; 另外一种是nginx PHP-FPM(也可以用spawn-fcgi) 。
(1) 如上面所说该两种结构都采用FastCGI对PHP支持, 因此HTTPServer完全解放出来, 可以更好地进行响应和并发处理。因此lighttpd和nginx都有klein, aber leistungsstark和effiziente的美誉。
(2) 分出一个好坏来用spawn-fcgi对php支持, 但是目前有用户说ligttpd的spwan-fcgi在高并发访问的时候,会出现上面说的内存泄漏甚至自动重启fastcgi。即:PHP脚本处理器当机,这个时候如果用户访问的话,可能就会出现白页(即PHP不能被解析或者出错).必须借助第三方的FastCGI处理器才可以对PHP进行解析,因此其实这样看来nginx是非常灵活的,它可以和任何第三方提供解析的处理器实现连接从而实现对PHP的解析(在nginx.conf中很容易设置)。
nginx可以使用spwan-fcgi(需要一同安装lighttpd,但是需要为nginx避开端口,一些较早的blog有这方面安装的教程),但是由于spawn-fcgi具有上面所述的用户逐渐发现的缺陷,现在慢慢减少使用nginx spawn-fcgi组合了.
c. 由于spawn-fcgi的缺陷, 现在出现了新的第三方(目前还是, 听说正在努力不久将来加入到PHP. core中)的PHP FastCGI ist ein Browser, der PHP-FPM (bei Google) und Spawn verwendet -fcgi比较起来有如下优点:
由于它是作为PHP的patch补丁来开发的,安装的时候需要和php源码一起编译,也就是说编译到php core中了,因此在性能方面要优秀一些;
同时它在处理高并发方面也优于spawn-fcgi,至少不会自动重启fastcgi处理器.具体采用的算法和设计可以google了解.因此,如上所说由于nginx的轻量和灵活性,因此目前性能优越,越来越多人逐渐使用这个组合:nginx PHP/PHP-FPM
三、IIS ISAPI模式这种模式适合开发环境中, 生产环境中用的较少.
目前在HTTPServer这块基本可以看到有三种stack比较流行:
(1)Apache mod_php5
(3)nginx PHP-FPM
三者后两者性能可能稍优, 但是Apache由于有丰富的模块和功能, 目前来说仍旧是老大.有人测试nginx -FPM hat die Funktion „Apache mod_php5“ von 5 bis 10 Jahren genutzt nginx PHP-FPM使用的人越来越多.
以上就介绍了基于php在各种web服务器的运行模式详解, 包括了方面的内容, 希望对PHP教程有兴趣的朋友有所帮助.