php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL

phpapache中一共有三种工作方式:CGI模式、FastCGI 、FastCGI是什么?

  FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行 为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中 并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail-Over特性等等。

  FastCGI的官方站点在http://www.fastcgi.com 1、Web Server 启动时载入FastCGI进程管理器(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)可以工作。

  二、为什么要使用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已经不做这个产品了。

  phpapache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL)

  以下分别比较:

  一、CGI模式与模块模式比较:

  phpapache中两种工作方式的区别(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模式更好的安全性以及更好的执行效率和速度。

  二、FastCGI运行模式分析:

  FastCGI 模式运行 PHP 的优点:

  以 FastCGI 模式运行 PHP 有几个主要的好处。首先就是 PHP 出错的时候不会搞垮 Apache,只是 PHP 自己的进程当掉(但 FastCGI 会立即重新启动一个新 PHP 进程来代替当掉的进程)。其次 FastCGI 模式运行 PHP 比 ISAPI 模式性能更好(我本来用 ApacheBench 进行了测试,但忘了保存结果,大家有兴趣可以自己测试)。

  最后,就是可以同时运行 PHP5 和 PHP4。参考下面的配置文件,分别建立了两个虚拟主机,其中一个使用 PHP5,另一个使用 PHP4。

  LoadModule fastcgi_module modules/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"

  Listen 80

  NameVirtualHost *:80

  DocumentRoot d:/www

  Options Indexes FollowSymlinks MultiViews

  ServerName php5.localhost

  AddType application/x-httpd-fastphp5 .php

  Action application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"

  IndexOptions FancyIndexing FoldersFirst

  Options Indexes FollowSymLinks MultiViews

  AllowOverride None

  Order allow,deny

  Allow from all

  Listen 8080

  NameVirtualHost *:8080

  DocumentRoot d:/www

  Options Indexes FollowSymlinks MultiViews

  ServerName php4.localhost

  AddType application/x-httpd-fastphp4 .php

  Action application/x-httpd-fastphp4 "/fcgi-php4/php.exe"

  Options Indexes FollowSymLinks MultiViews

  AllowOverride None

  Order allow,deny

  Allow from all

  使用上面的配置,访问 http://localhost/就使用 PHP5,而访问 http://localhost:8080/就使用 PHP4。所以只要合理配置,就可以让不同的虚拟主机使用不同版本的 PHP。FastCGI 模式的一些缺点:

  说完了好处,也来说说缺点。从我的实际使用来看,用 FastCGI 模式更适合生产环境的服务器。但对于开发用机器来说就不太合适。因为当使用 Zend Studio 调试程序时,由于 FastCGI 会认为 PHP 进程超时,从而在页面返回 500 错误。这一点让人非常恼火,所以我在开发机器上还是换回了 ISAPI 模式。

  最后,在 Windows 中以 FastCGI 模式存在潜在的安全漏洞。因为我还没有找到如何在 Windows 环境下实现 SuEXEC 的方法,因此 PHP 的进程总是以最高权限运行,这从安全角度来看显然不是个好消息。 很抱歉,因为您在网易相册发布了违规信息,账号被屏蔽。被屏蔽期间他人无法访问您的相册。

  去帮助中心,了解如何重新恢复服务。

时间: 2024-11-09 11:10:50

php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL的相关文章

Apache下PHP的几种工作方式

PHP在Apache中一共有三种工作方式:CGI模式.Apache模块DLL.FastCGI模式. 一.CGI模式 PHP 在 Apache 2中的 CGI模式.编辑Apache 配置文件httpd.conf 如下: # PHP4 版写法 ScriptAlias /php/ "D:/php/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php.exe" # PH

PHP在apache中的三种工作方式

cgi是什么? CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程.CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体. 以下分别比较:1. CGI模式与模块模式比较:PHP在apache中两种工作方式的区别(CGI模式.Apache 模块DLL)这两种工作方式的安装:PHP 在 Apache 2.0 中的 CGI 方式ScriptAlias /

http服务(五)——php在apache中的运行方式

php在apache下一般有三种工作方式:CGI,Apache模块,FastCGI 在CGI模式下,如果用户请求一个php文件,web服务器就会调用php解析器去解析这个文件,然后把结果返回给客户端. 在apache模块模式下,将php解析器作为了apache的一个模块,这样php解析器就与web服务器一起运行. 在fastcgi模式下,web服务器不会像cgi那样每次都启动一个新的进程,而是将内容传递到一个已有的进程中(这个进程在web服务器启动时就开启了,而且不会退出),这个进程就会一次次的

Apache的工作方式

Apache的2中工作方式: 1.prefork模式 次多路处理模块(MPM)实现了一个非线程型的,预派生的web服务器.它适合于没有线程安全库,需要避免线程兼容性问题的系统,它是要求将每个请求都独立处理的最好的MPM,这样若一个请求出现问题就不会影响到其他的请求. 这个MPM有 很强的自我调节能力,只需要很少的配置指令调整.最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰.同事有不能够太大,以致使需要使用的内存超出物理内存的大小. 2.worker模式 这个多路处理模

Apache的三种工作模式

Web服务器Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式. 它们分别是prefork,worker和event,它们同时也代表这Apache的演变和发展. 如何查看我们的Apache的工作模式呢?可以使用httpd -V 命令查看,如我安装的Apache 2.4版本. $ /usr/local/apache24/bin/httpd -V Server version: Apache/2.4.18 (Unix) Server buil

php在apache中运行模式

php在apache中运行模式 (2011-12-18 02:38:27) 标签: 杂谈 分类: 服务器及软件 一.php在php在三种工作方式:Apache 模块DLL) 以下分别比较: 1. php在CGI模式.PHP 在 中的 # 对 PHP 4 用这行 Action application/x-httpd-php "/php/php.exe" # 对 PHP 5 用这行 Action application/x-httpd-php "/php/php-Apache 2

Apache中3种MPM工作方式的区别及配置详解

MPM是Multi-Processing Modules,表示Apache中的多路处理模块,目前在Linux上的Apache2.2/2.4中包括三种模式:prefork.worker和event模式.apache或httpd的命令参数"-l"即可列出当前apache中已经编译了的模块,由于MPM只能在编译时指定其中一种,所以列出的静态模块中MPM只有1个,如下所示: # httpd -l Compiled in modules: core.c prefork.c    #说明使用的是p

Mac OS X中,有三种方式来实现启动项的配置

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 22.0px "Times New Roman"; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Times New Roman"; color: #000000 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0p

Exchange(2007/2010/2013)共存环境中IMAP和POP的工作方式

了解Exchange 2007.2010.2013共存环境中IMAP和POP的工作方式,对Exchange排错很有帮助. 我们需要知道Exchange 2013如何将IMP.POP请求转发到旧版本Exchange上,Exchange 2013 CAS接收到IMAP.POP请求时仍然是通过Proxy(代理)到目标服务器.通常Exchange 2013 ClientAccess Server接收到客户端的IMAP.POP请求时会执行两个操作:1).对请求进行认证(验收用户名和密码).2).执行IMA