首页 后端开发 php教程 基于php在各种web服务器的运行模式详解_PHP

基于php在各种web服务器的运行模式详解_PHP

Jun 01, 2016 pm 12:07 PM
php web服务器

一、php在apache中运行模式
 
php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL
以下分别比较:
1. CGI模式与模块模式比较:
php在apache中两种工作方式的区别(CGI模式、Apache 模块DLL)
这两种工作方式的安装:
PHP 在 Apache 2.0 中的 CGI 方式
ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php
# 对 PHP 4 用这行
Action application/x-httpd-php "/php/php.exe"
# 对 PHP 5 用这行
Action application/x-httpd-php "/php/php-cgi.exe"
PHP 在 Apache 2.0 中的模块方式
# 对 PHP 4 用这两行:
LoadModule php4_module "c:/php/php4apache2.dll"
# 别忘了从 sapi 目录中把 php4apache2.dll 拷贝出来!
AddType application/x-httpd-php .php
# 对 PHP 5 用这两行:
LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x-httpd-php .php
# 配置 php.ini 的路径
PHPIniDir "C:/php"
这两种工作方式的区别:
在CGI模式下,如果客户机请求一个php文件,Web服务器就调用php.exe去解释这个文件,然后再把解释的结果以网页的形式返回给客户机;
而在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。
所以从某种角度上来说,以apache模块方式安装的 PHP4有着比CGI模式更好的安全性以及更好的执行效率和速度。
2. FastCGI运行模式分析:
FastCGI的工作原理是:
(1)、Web Server 启动时载入FastCGI进程管理器【PHP的FastCGI进程管理器是PHP-FPM(php-FastCGI Process Manager)】(IIS ISAPI或Apache Module);
(2)、FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。
(3)、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。
(4)、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。 在正常的CGI模式中,php-cgi.exe在此便退出了。
在上述情况中,你可以想象 CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI,所有这些 都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

3. 为什么要使用FastCGI,而不是多线程CGI解释器?
这可能出于多方面的考虑,例如:
(1)、你无论如何也不能在windows平台上稳定的使用多线程CGI解释器,无论是IIS ISAPI方式还是APACHE Module方式,它们总是运行一段时间就崩溃了。奇怪么?但是确实存在这样的情况!
当然,也有很多时候你能够稳定的使用多线程CGI解释器,但是,你有可能发现网页有时候会出现错误,无论如何也找不到原因,而换用FastCGI方式 时这种错误的概率会大大的降低。我也不清楚这是为什么,我想独立地址空间的CGI解释器可能终究比共享地址空间的形式来得稳定一点点。
(2)、性能!性能?可能么,难道FastCGI比多线程CGI解释器更快?但有时候确实是这样,只有测试一下你的网站,才能最后下结论。原因嘛,我觉得 很难讲,但有资料说在Zend WinEnabler的时代,Zend原来也是建议在Windows平台下使用FastCGI而不是IIS ISAPI或Apache Module,不过现在Zend已经不做这个产品了。

4. FastCGI 模式运行PHP 的优点:
以 FastCGI 模式运行 PHP 有几个主要的好处。首先就是 PHP 出错的时候不会搞垮 Apache,只是 PHP 自己的进程当掉(但 FastCGI 会立即重新启动一个新 PHP 进程来代替当掉的进程)。其次 FastCGI 模式运行 PHP 比 ISAPI 模式性能更好(我本来用 ApacheBench 进行了测试,但忘了保存结果,大家有兴趣可以自己测试)。
最后,就是可以同时运行 PHP5 和 PHP4。参考下面的配置文件,分别建立了两个虚拟主机,其中一个使用 PHP5,另一个使用 PHP4。
复制代码代码如下:
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" -processes 3
ScriptAlias /fcgi-php4/ "d:/usr/local/php- 4.3.11/"
FastCgiServer "d:/usr/local/php-4.3.11/php.exe"
监听 80
NameVirtualHost *:80
DocumentRoot d:/www
选项索引 FollowSymlinks MultiViews
服务器名称 php5.localhost
AddType application/x-httpd-fastphp5 .php
操作 application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"

IndexOptions FancyIndexing FoldersFirst
选项索引 FollowSymLinks MultiViews
AllowOverride None
顺序允许、拒绝
全部允许

Listen 8080
NameVirtualHost *:8080

DocumentRoot d:/www
选项索引 FollowSymlinks MultiViews
服务器名称 php4.localhost
AddType application/x-httpd-fastphp4 .php
操作 application/x-httpd-fastphp4 "/fcgi-php4 /php.exe"

选项索引 FollowSymLinks MultiViews
AllowOverride None
顺序允许、拒绝
允许所有

使用上面的配置,访问 http://localhost / 就使用 PHP5,而访问 http://localhost:8080/ 就使用 PHP4。所以只要合理配置,就可以让不同的虚拟主机使用不同版本的 PHP。
FastCGI 模式的一些缺点:
说好了,也说说缺点。从我的实际使用来看,用 FastCGI 模式更适合生产环境的服务器。但是对于开发用机器来说就不太合适了。因为当使用 Zend Studio 调试程序时,由于 FastCGI会考虑PHP进程超时,从而在页面返回500个错误。这一点让人非常烦恼,所以我在开发机器上还是换回了ISAPI模式。
最后,在Windows中以FastCGI模式存在潜在的安

二、php在nginx中运行模式(nginx PHP-FPM ) 目前理想选择
 
使用FastCGI方式现在常见的有两种stack: lighthttpd 生成 fcgi; 另外一种是nginx PHP-FPM(也可以用spawn-fcgi) 。
(1)如上面所说的该两种结构都采用FastCGI对PHP的支持,因此HTTPServer完全解放出来,可以更好地进行响应和并发处理。因此lighttpd和nginx都有小,但强大和高效的美誉。

(2)两者还可以分出一个好坏来,spawn-fcgi由于是lighttpd的一部分,因此安装了lighttpd一般会使用spawn-fcgi对php支持,目前有用户说ligttpd的spwan-fcgi在高并发访问的时候,会出现上面说的内存泄漏自动重启fastcgi。即:PHP脚本内存当机,这个时候如果用户访问的话,可能就会出现白页(即PHP不能被解析或者错误)。

另一个:首先nginx不是lighttpd本身就含带了fastcgi(spawn-fcgi),因此它是轻量级的,必须借助第三方的FastCGI处理器才可以对PHP完全进行解析,因此其实这样看来nginx是非常灵活的,它可以和任何第三方提供解析的处理器实现连接从而实现对PHP的解析(在nginx.conf中很容易设置)。

nginx可以使用spwan-fcgi(需要同时安装lighttpd,但是需要为nginx注意端口,一些较早的博客有这方面的安装的教程),但是由于spawn-fcgi具有上面所述的用户逐渐发现的缺陷,现在慢慢减少使用nginxspawn-fcgi组合了。

c. 由于spawn-fcgi的缺陷,现在出现了新的第三方(目前还是,听说正在努力不久将来加入到PHP核心中)的PHP的FastCGI处理器,称为PHP-FPM(具体可以google)。它和spawn -fcgi比较起来有如下优点:

由于它是作为PHP的补丁来开发的,安装的时候需要和php源码一起编译,毕竟编译到php core中了,因此在性能方面要一些;
同时它在处理高并发方面也支撑spawn-fcgi,至少不会自动重启fastcgi处理器。具体采用的相应算法和设计可以google了解。

,如上所说由于nginx的轻量和灵活性,因此目前性能相当,越来越多的人逐渐使用这个组合:nginx PHP/PHP-FPM
三、IIS ISAPI模式这种模式适合开发环境中,生产环境中

四、总结
目前在HTTPServer这块基本可以看到有透明stack比较流行:
(1)Apache mod_php5
(2)lighttp spawn-fcgi
(3)nginx PHP-FPM
三者后两者性能可能稍优,但 Apache 由于有丰富的模块和功能,目前来说又是老大了。有人测试nginx PHP-FPM在高并发情况下可能会达到Apache mod_php5的5~10倍,现在nginx PHP-FPM使用的人越来越多。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

CakePHP 项目配置 CakePHP 项目配置 Sep 10, 2024 pm 05:25 PM

在本章中,我们将了解CakePHP中的环境变量、常规配置、数据库配置和电子邮件配置。

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 日期和时间 CakePHP 日期和时间 Sep 10, 2024 pm 05:27 PM

为了在 cakephp4 中处理日期和时间,我们将使用可用的 FrozenTime 类。

CakePHP 文件上传 CakePHP 文件上传 Sep 10, 2024 pm 05:27 PM

为了进行文件上传,我们将使用表单助手。这是文件上传的示例。

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

在本章中,我们将学习以下与路由相关的主题?

讨论 CakePHP 讨论 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

CakePHP 创建验证器 CakePHP 创建验证器 Sep 10, 2024 pm 05:26 PM

可以通过在控制器中添加以下两行来创建验证器。

See all articles