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 的进程总是以最高权限运行,这从安全角度来看显然不是个好消息。 很抱歉,因为您在网易相册发布了违规信息,账号被屏蔽。被屏蔽期间他人无法访问您的相册。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值