⑴ 如何配置apache以fastcgi模式运行php
第一步:下载安装的文件
1. Apache 版本 httpd-2.2.21-win32-x86-no_ssl.msi
2. mod_fcgid 版本 mod_fcgid-2.3.6-win32-x86.zip
3. MySQL 版本 mysql-5.5.19-win32.msi
4. PHP 版本 php-5.3.5-nts-Win32-VC6-x86.zip
提示:
1. 建议选择无SSL功能的Apache版本来完成开发,我们这里使用了httpd-2.2.21-win32-x86-no_ssl.msi。
2. 建议选择由Apache官方所提供的mod_fcgid 作为FastCGI模块。我们这里使用目前最新版本2.3.6。 mod_fcgid官方地址
3. Windows下安装MySQL就选择.msi安装包格式,我们选择了mysql-5.5.19-win32.msi ,双击根据向导安装即可,简单方便。
4. PHP我们选择用php-5.3.5-nts-Win32-VC6-x86.zip 这个版本。这个是nts(非线程安全)版本,是针对PHP的FastCGI安装方式。
第二步:安装文件
1. 在要安装的磁盘建一个文件夹。为了以后管理方便我们在D盘的根目录下创建一个WAMP文件夹。 D:\WAMP(WAMP是 windows+apache+mysql+php的缩写)。
2. 在WAMP文件夹下创建一个WWW文件夹,用来存放你的PHP网站程序。D:\WAMP\WWW。
3. 安装Apache服务器,把Apache服务器安装到 D:\WAMP\Apache 文件夹。具体Apache安装过程可以参考文档 Apache安装图解。
4. 把下载的php-5.3.5-nts-Win32-VC6-x86 解压到 D:\WAMP\PHP 文件夹。
5. 安装MySql数据库,把MySQL安装到 D:\WAMP\MySQL文件夹。具体MySQL安装过程可以参考文档MySQL安装图解。
第三步:配置 Apache
首先使用文本编辑工具(推荐 EditPlus )打开 D:\WAMP\Apache\conf\httpd.conf 文件,这个文件是Apache的配置文件,下面几步都是在修改这个文件的内容。
要注意的是修改完 httpd.conf 文件需重新启动Apache服务,新设置才会生效。
1. 设置监听端口
打开 httpd.conf 文件后,找到 Listen(大概在第46行),将它后面的数字改为8080,如下:
Listen 8080
这个参数用来设置Apache服务器的监听端口,一般默认为80。修改为8080 是为了避免和Windows 2003系统的IIS端口号冲突,如果你没有启用IIS,也可以使用默认的80端口号。
2. 修改网站存放目录
我们知道Apache默认的网站存放目录为Apache安装目录下的htdocs文件夹。当你更改网站存放目录,就必须修改相应的Apache配置。
在配置文件 httpd.conf 中查找 DocumentRoot,将其修改为指向网站目录的正确文件夹。我们这里改为
DocumentRoot "D:/WAMP/www"
同时,查找 This should be changed to whatever you set DocumentRoot to,在它下面有行 <Directoy 默认的DocumentRoot >,将其修改为你自己配置的DocumentRoot 路径。我们这里修改为:
<Directory "D:/WAMP/www">
3. mod_fcgid 配置
我们将下载的 mod_fcgid-2.3.6-win32-x86.zip 压缩包中的“mod_fcgid.so”文件复制到apache的“moles”目录。
打开 httpd.conf 文件,在最后加入如下配置:
LoadMole fcgid_mole moles/mod_fcgid.so
<IfMole mod_fcgid.c>
AddHandler fcgid-script .fcgi .php
#php.ini的存放目录
FcgidInitialEnv PHPRC "D:/WAMP/PHP"
# 设置PHP_FCGI_MAX_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi进程在处理完所有请求前退出
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#php-cgi每个进程的最大请求数
FcgidMaxRequestsPerProcess 1000
#php-cgi最大的进程数
FcgidMaxProcesses 5
#最大执行时间
FcgidIOTimeout 120
FcgidIdleTimeout 120
#php-cgi的路径
FcgidWrapper "D:/WAMP/PHP/php-cgi.exe" .php
AddType application/x-httpd-php .php
</IfMole>
修改DocumentRoot 路径的配置为:
<Directory "D:/WAMP/WWW">
Options Indexes FollowSymLinks ExecCGI
Order allow,deny
Allow from all
AllowOverride All
</Directory>
注意:上面红色文字部分。在option中添加一个属性ExecCGI
4. 修改目录首页文件
在配置文件 httpd.conf 中查找 DirectoryIndex index.html 将其修改成:
DirectoryIndex index.html index.htm index.php
DirectoryIndex 指的是当客户浏览器访问的路径是一个目录时,Apache默认执行的文件。
以我们所修改的为例:当客户浏览器访问一个目录时,Apache会去找该目录下的index.html,如果没有再找index.htm,还没有再找 index.php。都找不到则默认显示该目录下的文件列表。参考文档:如果防止Apache显示文件列表
第四步:配置PHP
打开PHP安装目录,即D:\WAMP\PHP,我们可以看到目录下有两个这样的文件 php.ini-development 和 php.ini-proction,第一个是开发使用的配置文件,第二个是生产环境的配置,因为我们是在本机做开发,所以选择前者。将php.ini-development复制一份到同目录下,并改名为 php.ini。这个php.ini 就是当前使用的配置文件,以下几步都是在修改这个php.ini文件的内容。要注意的是,修改php.ini文件后需重新启动Apache服务,新设置才会生效。
1. 指定PHP扩展库的存放目录
在Windows下PHP的扩展库通常以 DLL 形式存放在PHP的ext目录中。
使用文本工具打开php.ini文件,查找extension_dir = "ext",也就是在 On windows 下面那一行。把它前面的分号“;”去除掉,改为如下:
extension_dir = "D:/WAMP/PHP/ext"
extension_dir 表示PHP扩展库的具体目录,以便调用相应的DLL文件。
2. 开启相应的扩展库
默认情况下许多PHP的扩展库都是关闭的,比如默认PHP不支持连接Mysql数据库,需开启相应的扩展库。
这里我们开启一些常用的扩展库。
查找 ; Windows Extensions(大概在941行),在它的下面是extension列表。
找到如下扩展:
;extension=php_curl.dll
;extension=php_gd2.dll
;extension=php_mbstring.dll
;extension=php_exif.dll
;extension=php_mysql.dll
;extension=php_mysqli.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_odbc.dll
;extension=php_sockets.dll
;extension=php_xmlrpc.dll
;extension=php_xsl.dll
把以上extension 前面的分号 “;” 去掉。如果你希望加载其它扩展模块,方法相同,只要去掉前面的分号即可。
提示1:重启Apache提示 “unable to load dynamic library......php_curl.dll”,加载php_curl.dll错误。解决方法是拷贝 PHP 目录下的 libeay32.dll 和 ssleay32.dll 到 windows 目录或 windows/system32 目录下,只要是系统 Path 环境变量里包含的路径就可以。如果不想拷贝,你也可以直接把 PHP 路径放到系统 Path 环境变量里。 右击我的电脑=>属性=>高级=>环境变量=>系统变量里有个Path,双击打开,把你的PHP路径加个分号“;”再前面( ;D:\WAMP\PHP ),添加进去就OK了。重启Apache不再提示该错误。
提示2:Exif 扩展是用来显示图片的 exif 信息的,因为该扩展需要 mbstring.dll 支持,所以必须将 extension=php_exif.dll 这一行写到extension=php_mbstring.dll 的后面。
提示3:如果PHP自带的扩展库不能满足你的需要,你可以去 pecl.php.net 查找并下载你需要的库。windows用户可以去 pecl4win.php.net 或者 http://downloads.php.net/pierre/ 下载已经编译好的DLL文件,也可以去http://museum.php.net/php5/ 载PECL集合压缩包。
提示4:很多人在找php_zip.dll,其实从php5.3开始已经集成了zip扩展,你可以用<?php phpinfo() ?> 找到zip扩展的说明。
3. 让PHP支持短标签
在 php.ini 配置文件查找 short_open_tag = Off (大概在266行)把它修改成:short_open_tag = On 让其支持短标签。
php的代码一般包含在<?php .... ?>的标签内,设置 short_open_tag = On 之后,可以写成更简洁的形式:<? .... ?>。
4. 配置PHP的Session功能
在使用session功能时,我们必须配置session文件在服务器上的保存目录。我们需要为session建立一个可读写的目录,这个目录最好独立于网站目录之外。
这里把目录上建在了D:\WAMP\sessiontmp,然后在 php.ini 配置文件中找 ;session.save_path = "/tmp" (大概在1467行),去掉前面的分号“;” ,改为如下:
session.save_path = "D:/WAMP/sessiontmp"
⑵ 护卫神PHP套件出现"FastCGI"等错误怎么解决
错误一: 处理程序“FastCGI”在其模块列表中有一个错误模块“FastCgiMole”。
英文系统提示:Handler “FastCGI” has a bad mole “FastCgiMole” in its mole list。
原因分析:这个主要是没有安装应用程序开发功能。
解决办法:把应用程序开发功能选择上就可以了,PHP的CGI版本,CGI的功能是必须选择的。
错误二:模块IsapiMole通知ExecuteRequestHandler处理程序PHP-Handler错误代码0x800700
或 处理程序“AboMapperCustom-5095705”在其模块列表中有一个错误模块“IsapiMole”
原因分析:没有安装ISAPI扩展。
解决办法:在IIS安装ISAPI扩展即可。
错误三:The FastCGI Handler was unable to process the request.
原因分析:这种多出现于PHP升级,一般是你升级前的PHP.ini存放在C:\windows\system32\php.ini
解决办法:删除C:\windows\system32\php.ini,并重启IIS。
错误四:
解决办法:这个可能是权限不足导致的,在网站根目录的上一级目录加Users的读权限即可。
错误五:
错误提示:Unable to place a FastCGI process in a JobObject. Try disabling the Application Pool CPU Limit feature
原因分析:IIS开启了程序池的CPU限制,而FastCGI模式的PHP不支持CPU限制。
解决办法:取消程序池CPU限制,或使用ISAPI模式的PHP。
错误六:
安装PHP7.0套件出现错误“FastCGI进程意外退出”,双击“php-cgi.exe”出现提示“无法启动此程序,因为计算机中丢失 api-ms-win-crt-stdio-l1-1-0.dll。尝试重新安装该程序以解决此问题。”,如图:
原因分析:出现此种情况,是因为服务器无法安装VC++ 2015运行库,导致php运行环境不具备,因此出错。
解决办法:据分析,出现此种情况的解决办法最好就是重装系统,并且更换操作系统,如果还不行,建议打SP1补丁。
⑶ php5.3.2如何设置fastcgi
第一步:iis6.0环境配置,这里不多介绍
第二步:下载php5.3.2的windows压缩版本:php-5.3.2-nts-Win32-VC9-x86.zip
1、下载地址:http://windows.php.net/download/,选择VC9 x86 Non Thread Safe。有关PHP版本说明
2、把php-5.3.2-nts-Win32-VC9-x86.zip解压缩到D:\PHP
3、修改PHP.ini
extension_dir = “D:\php\ext” 指向php文件夹下放置“php_*.dll”文件的路径
magic_quotes_gpc = On 如果是 Off,一定要打开为 On,这是防止sql攻击的重要的一步!5.0版本已经默认 On 了
register_globals=Off 改为 register_globals=On ,使传递全局变量有效;
short_open_tag =Off,把off改成On ,此处一般能解决运行安装Discuz!论坛时出现空白的问题
然后再查找以下字符串,把代码前的分号去掉。
extension=php_mbstring.dll 这个不选的话用phpMyAdmin会出现红色提示
extension=php_dba.dll
extension=php_dbase.dll
extension=php_filepro.dll可选
extension=php_gd2.dll支持GD库的,一般要滴
extension=php_imap.dll 可选
extension=php_ldap.dll
extension=php_mysql.dll支持MySQL的
接下来修改了一些文件上传以及内存使用最大限制:
memory_limit = 20M 内存容量
post_max_size = 20M 闪存容量
upload_max_filesize = 20M 附件容量
第三步:下载安装 Microsoft FastCGI Extension for IIS 5.1 and 6.0
1、下载地址:
http://www.iis.net/download/fastcgi
http://download.microsoft.com/download/E/0/C/E0C0709A-66E5-4113-9A6C-A5F65BF6717D/fcgisetup_1.5_rtw_x86.msi
2、安装fcgisetup_1.5_rtw_x86.msi
3、配置fcigext.ini (在%WINDIR%\system32\inetsrv 目录里)
在fcigext.ini 末尾添加如下内容即可:
[Types]
php=PHP
[PHP]
ExePath=D:\php\php-cgi.exe (PHP目录)
4、配置FastCGI 扩展与PHP 协同工作
右击“网站”选择“属性”,
单击“主目录”选项,点击“配置”按钮,
单击”添加“按钮,
单击”浏览“ 在 %WINDIR%\system32\inetsrv 里寻找fcgiext.dll 。
在扩展名里输入 .php ,
动作选择”限制为“,输入”GET,HEAD,POST“。
确认”脚本引擎“和”检查文件是否存在“是否选择,
如没选中,请选中。
确认无误后,单击“确定”。
第四步:写个简单的脚步测试PHP FastCGI 是否正常工作了。
在C:\Inetpub\wwwroot 目录创建test.php 文件,打开Test.php,填写如下内容:<?php phpinfo(); ?>
保存Test.php,重启IIS,然后在浏览器地址栏里输入http://localhost/Test.php 看是否正确。
⑷ php以fastCGI的方式运行时文件系统权限问题及解决方法
在IIS7.0上以FastCGI方式配置好PHP运行环境,测试可以正常运行PHP程序后,将PHP程序部署上去,导入程序原来的数据和配置信息。很快就有问题出来啦下面我们就详细记录下。
今天准备将一个php
demo放在IIS下运行,网站在IIS下的配置是这样的:
应用程序池是集成模式下的.net
framework
2.0(2.0或4.0没什么关系,因为php以fastCGI的方式在跑),
应用程序池标识配置为IIS内置的NETWORKSERVICE,
使用的认证方式为匿名身份验证。
打开本地的网站,访问php页面,
出现了500错误。
好吧,是权限问题,最简单的解决办法是把C:的权限设成Everyone,
并允许完全控制:
重新访问php页面,成功了:
上面的方法是够简单,但也太不安全了,平时本地搭个demo这样做没问题,真正上线的时候,这样做迟早出问题的。
于是重新设置,把该目录下的只读权限赋给NETWRORKSERVICE帐号再试一下
不过问题还是没有解决,访问的时候,出现了401错误
错误信息中包括显示登录用户为匿名,检查了网站下的身份验证(再点击
匿名身份验证->编辑),原来网站默认情况下,在登录方法为匿名时,使用的默认登录用户为IUSR(就是我们看到的匿名登录用户了)
那么解决办法就是:
1.
将IUSR设置为C:的读权限,类似之前对NETWORKSERVICE的设置。
2.
或选择使用应用程序池标识即可。
经试验,方法1与2都成功。
Note:NETWORKSERVICE在IIS7中隶属于iis_iusers用户组,之前对NETWORKSERVICE的设置也可以改为对iis_iusers的设置,同样也可以解决问题,只是权限被进一步放宽了而已。
以上所述就是本文的全部内容了,希望大家能够喜欢。