一、CGI整合问题
对于自行配置的PHP环境,整合CGI前面写过一篇文章,按照步骤修改就可以了。(【经验】Apache2.2+(多版本)PHP的fastCGI的配置)
但很多情况下,为了简便,我们都会用一键集成的环境安装(自行配置步骤比较繁琐,耗费时间,如果想自行配置,见【经验】WIN7系统配置PHP(Apache+Mysql)+JSP(Apache整合Tomcat)运行环境)。
这里我用到的是PHPnow(版本PHPnow-1.5.6)一键集成环境。默认的PHP运行模式是Apache 2.0 Handler,为了提升运行效率,当然得配置fastCGI模式了(原因见如上第一个链接)。
但如果我们按照上面那篇文章那种常规步骤配置CGI的话会发现,怎么都不会成功!(配置CGI后,php默认配置文件php.ini无法加载)什么原因呢?
从phpinfo中的Loaded Configuration File E:\PHP\php-5.2.14-Win32\php-apache2handler.ini你终于恍然大悟,原来PHPnow加载的PHP配置文件是php-apache2handler.ini,而fastCGI默认加载的文件名是php.ini所以无论怎么配置,fastCGI始终无法加载php配置文件。
二、CGI整合解决方案
最方便的方式,当然从PHPnow安装包中入手了,把PHP配置文件重新改名为php.ini
1、打开PHPnow-1.5.6.zip压缩的安装包,找到Package.7z\Pn目录下的main.php打开,
找到php_ini = $php_dir.'\php-apache2handler.ini';这句,改成php_ini = $php_dir.'\php.ini';再次安装PHPnow的时候,你“奇迹”的发现PHP配置文件名终于改回成默认的php.ini文件了。
2、将fastCGI的module文件放进Apache的modules目录下
(当然你也可以等安装完后再放进去)
3、把以上修改的保存到安装包中,然后就像以前一样正常安装了。
4、安装完后,需修改两处,
首先,PHP的php.ini文件
找到extension_dir = "..\..\php-5.2.14-Win32\ext",改为extension_dir = "E:\PHP\php-5.2.14-Win32\ext"
(这个地方很怪,如果是相对路径,Apache和fastCGI无法启动[apache error.log记录错误:mod_fcgid: get overlap result error],所以必须改为绝对路径,自己按照自己的安装情况改哦~)
其次,apache的httpd.conf文件
加入如下内容:
LoadModule fcgid_module modules/mod_fcgid.so AddHandler fcgid-script .fcgi .php #php.ini的存放目录 #FcgidInitialEnv PHPRC "E:/PHP/php-5.2.14-Win32/php-apache2handler.ini" #设置PHP_FCGI_MAX_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi进程在处理完所有请求前退出 FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000 #php-cgi每个进程的最大请求数 FcgidMaxRequestsPerProcess 1000 #php-cgi最大的进程数 FcgidMaxProcesses 15 #最大执行时间 FcgidIOTimeout 120 FcgidIdleTimeout 120 #php-cgi的路径 FcgidWrapper "E:/PHP/php-5.2.14-Win32/php-cgi.exe" .php AddType application/x-httpd-php .php(加载fastCGI模块,同时进行相应配置,同样,php-cgi的路径根据自己安装情况改)
然后,把<Directory "../htdocs">内的
Options Indexes FollowSymLinks 改为 Options Indexes FollowSymLinks Includes ExecCGI
(指定该目录下的PHP运行模式)
5、重启Apache,你会看到如下画面:
CGI-FCGI于是你慨叹一声,终于配置好了啊!
三、Apache虚拟机配置
如果你有如下需求:服务器配置多个端口,每个端口指定不同的根目录。那么,接着往下配置吧
1、首先,必须确保
# Virtual hosts
Include conf/extra/httpd-vhosts.conf 加粗的字体前没有#(即没有被注释掉,开启Apache的虚拟机配置)
2、然后加上其他的监听端口(比如8080)
Listen 80
Listen 8080
3、同时打开Apache的虚拟机配置文件httpd-vhosts.conf(Apache-22\conf\extra )
把其中的内容替换成如下:
<VirtualHost *:8080> ServerAdmin [email protected] DocumentRoot E:\PHP ServerName *:8080 <Directory "E:\PHP"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>(配置该虚拟机相关参数,自己指定端口,及端口对应的根目录)
4、重启Apache,你会看到如下画面(为便于你们观察,我在8080端口的根目录下放了一个index.php文件,echo "8080";phpinfo();)
fastCGI配置成功,8080端口及根目录配置成功!同时80端口也运行正常,于是你大嚎一声“终于配置完成了!”
【参考】