php在apache有3中运行方式:CGI模式、FastCGI模式、Apache 模块DLL。
Cgi模式和模块dll加载方式比较:
Cgi模式下,apache调用外部执行器php.exe执行php代码,并将解释后生成的html代码和原html整合,再传递给apache服务器,其在执行时每次都需要重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构,运行速度非常慢,但因为是外部加载执行器,php代码执行出错不会导致apache崩溃。
在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。所以从某种角度上来说,以apache模块方式安装的 PHP4有着比CGI模式更好的安全性以及更好的执行效率和速度。
Cgi和fastcgi模式比较:
Fastcig是cgi的升级版,Cgi和fastcgi工作模式大抵相同,但fastcgi模式中fastcgi的进程管理器可用来管理cgi解释器,该管理器在cgi解释器完成请求后,会处于挂起状态,用以等待接下来的请求,因为向比较cgi每次都需要重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构,fastcig模式明显要快很多。
三种模式在apache中使用的方式如下:
一、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"
# PHP5 版写法
ScriptAlias /php/ "D:/php/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php-cgi.exe"
二、Apache模块模式
PHP 在 Apache 2中的 模块模式。编辑Apache 配置文件httpd.conf 如下:
# PHP4 版写法
LoadModule php4_module "D:/php/php4apache2.dll"
AddType application/x-httpd-php .php
# 别忘了从 sapi 目录中把php4apache2.dll 拷贝出来!
# PHP5 版写法
LoadModule php5_module "D:/php/php5apache2.dll"
AddType application/x-httpd-php .php
PHPIniDir "D:/php"
# PHPIniDir 是用来指明php配置文件php.ini 的路径
三、FastCGI模式
Apache下的FastCGI模块目前网上有两个版本 mod_fastcgi 和 mod_fcgid。 推荐用 mod_fcgid。
使用 mod_fcgid 配置fastCGI模式
下载的 mod_fcgid,将压缩包中的“mod_fcgid.so”文件复制到apache的“modules”目录。打开Apache的httpd.conf 文件,在最后加入如下配置:
LoadModule fcgid_module modules/mod_fcgid.so
AddHandler fcgid-script .fcgi .php
#php.ini的存放目录
FcgidInitialEnv PHPRC"D:/PHP"
# 设置PHP_FCGI_MAX_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi进程在处理完所有请求前退出
FcgidInitialEnvPHP_FCGI_MAX_REQUESTS 1000
#php-cgi每个进程的最大请求数
FcgidMaxRequestsPerProcess1000
#php-cgi最大的进程数
FcgidMaxProcesses 5
#最大执行时间
FcgidIOTimeout 120
FcgidIdleTimeout 120
#php-cgi的路径
FcgidWrapper "D:/PHP/php-cgi.exe" .php
AddType application/x-httpd-php .php
修改DocumentRoot 路径的配置为:
Options IndexesFollowSymLinks ExecCGI
Order allow,deny
Allow from all
AllowOverride All