win2003+iis 6.0+fastCgi+php 5.3(installer)
1. PHP 5.3 不再支持 ISAPI 了 && IIS 有了官方的 FastCGI 支持
A, IIS 5.1 、 6.0 、 7 ,请先安装 Microsoft FastCGI ;
下载地址 : http://www.iis.net/1521/ItemPermalink.ashx
B. 没有了 ISAPI 支持之后,对于 PHP 5.3 来说, Installer 和 zip 没有什么太大差别了;相比来说 ,installer 版本东西少了一些(库没少带,还没有那个烦人的 phar 版 PEAR, Installer 版本没有 php-win.exe , ext 下的 PECL 库也要少 10 个),更清爽;
C 如果装的是 installer 版本并且还需要 PEAR ,那就这么做: 1. 把 http://pear.php.net/go-pear 下载下来; 2. php go-pear. 如果装的是 zip 版本,请执行 php -d phar.require_hash=0 go-pear.phar ,或者按照上边 installer 的方法装非 phar 版本的 PEAR 。
2. IIS 下 PHP 的 ISAPI 和 FastCGI 比较
在 Windows IIS 6.0 下配置 PHP ,通常有 CGI 、 ISAPI 和 FastCGI 三种配置方式,这三种模式都可以在 IIS 6.0 下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异。
1 、 CGI (通用网关接口 /Common Gateway Interface )一般是可执行程序,例如 EXE 文件,和 WEB 服务器各自占据着不同的进程 , 而且一般一个 CGI 程序只能处理一个用户请求。这样,当用户请求数量非常多时,会大量占用系统的资源,如内存、 CPU 时间等,造成效能低下。
2 、 ISAPI ( Internet Server Application Program Interface )是微软提供的一套面向 WEB 服务的 API 接口,它能实现 CGI 提供的全部功能,并在此基础上进行了扩展,如提供了过滤器应用程序接口。 ISAPI 应用大多数以 DLL 动态库的形式使用,可以在被用户请求后执行,,在处理完一个用户请求后不会马上消失,而是继续驻留在内存中等待处理别的用户输入。此外 ,ISAPI 的 DLL 应用程序和 WEB 服务器处于同一个进程中,效率要显著高于 CGI 。
在 Windows Server 2003 的 IIS6 下配置 ISAPI 方式的 PHP ,配置方法是,在 IIS 的“ WEB 服务扩展”中,添加一个新的 WEB 服务扩展,程序后缀为 PHP , ISAPI 程序为 php5isapi.dll ,然后再“环境变量” - “系统变量”中增加变量名 PHPRC ,数值为 php.ini 的路径,在 Internet 信息服务管理器中,选择网站或应用程序的根目录,打开目录属性页(右键选择“属性”),再选择“主目录”。点击“配置”按钮,选择“映射” Tab 页。点击“添加 ... ”,在“可执行文件”设为 : c:/php/php5isapi.dll ,扩展名设为 .php ,选择“确认文件是否存在”,然后“确定”保存设置。重启服务器即可完成 PHP 的配置。
3 、 FastCGI 是可伸缩架构的 CGI 开放扩展,其主要行为是将 CGI 解释器进程保持在内存中并因此获得较高的性能。传统的 CGI 解释器的反复加载是 CGI 性能低下的主要原因,如果 CGI 解释器保持在内存中并接受 FastCGI 进程管理器调度,则可以提供良好的性能、伸缩性等。
FastCGI 已经集成于 IIS7 ,也支持 IIS6 ,在 IIS6 中的安装方法可参见微软的官方文档,我这里简单翻译一下。
先点这里下载一个 32 位的 FastCGI extension for IIS ,然后将其安装,安装后的文件应该放到 system32/inetsrv 目录下。
之后打开 system32/inetsrv 目录,执行下面的语句,其中 c:/php 为你的 PHP 目录,可以修改为其他数值。
cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"c:/php/php-cgi.exe"
在 Internet 信息服务管理器中,选择网站或应用程序的根目录,打开目录属性页(右键选择“属性”),再选择“主目录”。点击“配置”按钮,选择“映射” Tab 页。点击“添加 ... ”,在“可执行文件”设为 : c:/windows/system32/inetsrv/fcgiext.dll ,扩展名设为 .php ,选择“确认文件是否存在”,然后“确定”保存设置。
修改 php.ini 文件,增加如下语句:
fastcgi.impersonate = 1
cgi.fix_pathinfo = 1
cgi.force_redirect = 0
之后打开 system32/inetsrv 目录,执行以下语句:
cscript fcgiconfig.js -set -section:"PHP" -InstanceMaxRequests:10000
cscript fcgiconfig.js -set -section:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000
最后,配置 c:/php 目录的安全性,使得 IIS_WPG 组对于这个目录有读取和执行的权限。
这时候,基于 FastCGI 的 PHP 就成功配置到 IIS6 上了。
不过根据我自己的测试, FastCGI 的性能比 ISAPI 的好像高不了多少,不知道 Windows Server 2008 下的 IIS7 是不是会好一些。这里是微软提供的基于内置 FastCGI 的 IIS7 安装 PHP 的方法。
以下我自己安装成功的步骤 :
网站 - 属性 - 主目录 - 配置 - 映射 - 添加 - 确定
打开目录 :C:/WINDOWS/system32/inetsrv 下的 fcgiext.ini 配置文件
在文件内容最后加上如下代码 :
php=PHP
[PHP]
ExePath=C:/Program Files/PHP/php-cgi.exe (/* 这里是 PHP 默认安装的路径 */)
之后再打开目录 :C:/Program Files/PHP 的 php.ini 配置文件
找到 :fastcgi.impersonate = 1; 这句 , 把前面的 ; 去掉 , 如下图 :
第四步 : 在命令提示符运行 iisreset 命令重启 IIS 服务 .
第 5 步 : 测试是否安装成功 !
建立一个网站 ,test.php 文件内容为 :
文件 :test.php
看到即安装 PHP 成功
<Br />
<?php
echo "www.xueit.com 调试安装 PHP 环境 ";
?>
之后运行此文件 , 看下图
到此步正式安装运行 PHP 了 !
安装过程出现小插曲 , 如果运行测试文件出现如下提示 :
FastCGI Error
The FastCGI Handler was unable to process the request.
--------------------------------------------------------------------------------
Error Details:
Could not find entry for "php" on site 1960240566 in [Types] section.
Error Number: 1413 (0x80070585).
Error Description: ?TD § ? ÷ò y? £
HTTP Error 500 - Server Error.
Internet Information Services (IIS)
即说明没有安装成功 ! 请按照本教程的第三步修改配置即可 !!
另外 :
运行 phpinfo() 时出现如下错误 :
PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for '8.0/no DST' instead in E:/Aiden 的文件 /WorkFile/ 短信平台 /SmsSystem/text.php on line 2
------------------=====================================================
在网上查到是时区设置不对 , 经参考以下的文章 , 终于搞定 :
PHP 5.3.0 在六月份已经出来了,今天装的也是最新版本,网上查了一下资料,得知 PHP Team 首次分离出了一个 Windows 团队。Windows 版的下载也挪到了 windows.php.net 。同时 5.3 也去掉了 ISAPI 支持,说 Microsoft 的 IIS FastCGI 比 ISAPI 快。我想这样也好。
由于之前曾纯手工配置 IIS 6 下 FastCGI 跑 PHP ,网址是:
《纯手工配置 IIS 6 下 FastCGI 的 PHP 》http://pcvc.net/archive/2008/8/26/90.html
还走老路,还是按以前的方法。所有步骤都做完后,运行测试页面,出现以下错误:
PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for '8.0/no DST' instead in D:/ITLibsWeb/test.php on line 2
一看应该是 date.timezone 设置的问题,网上搜索一下,有这么一段:
-------------------------------------------
一般 PHP 无论是在 Windows 下还是 Linux 下安装,其默认安装配置的时区都是与中国相差 8 小时, 我们可以通过下面 2 方法解决它:
1. 在php.ini 中修改当地时区获取中国时间, 可在 php.ini 中查找 date.timezone 并修改.
windows 下 php.ini 一般在:C:/WINDOWS/php.ini
linux 下 php.ini 一般在 /etc/php.ini
date.timezone = "Asia/Chongqing"
2. 在编写PHP 代码时处理8 小时得到正确中国时间
echo gmdate('Y-m-d H:m:s', time()+8*3600);
-------------------------------------------
以下是另外一处引用:
使用xampp 时间不久,今天为了纠正php 获取函数是获取服务器时间。
因为php5.1.0 开始,php.ini 里加入了date.timezone 这个选项,默认情况下是关闭的。显示的时间都是格林威治标准时间, 和北京时间差了正好8 个小时。
网上找到的方法:
修改php.ini 文件,查找 ;date.timezone = ,把前面的分号去掉在 “= ”后面加上时区。
比如:Asia/Chongqing ( 重庆) ,Asia/Shanghai ( 上海) ,Asia/Urumqi ( 乌鲁木齐) ,Asia/Macao ( 澳门) ,Asia/Hong_Kong ( 香港) ,Asia/Taipei ( 台北) ,PRC
例
;date.timezone =
改成:
date.timezone = Asia/Shanghai
方法很简单。可是在xampp 下,把php/php.ini 文件改来改去都没用。后来网上搜了才发现,该死的xampp ,把php.ini 放在apache/bin 下面,修改这个里面的php.ini 才有用。
我的配置是:
date.timezone = Asia/Shanghai
设置了 date.timezone 就可以运行了。
终于搞定 , 这一过程的注意事项 :
win2003+iis 6.0+fastCgi+php 5.3(installer)
晕菜 , 始终报
The FastCGI Handler was unable to process the request.
Error Details:
win2003+apach 2.2+php 5.3(installer)
1. apach 2.2 下载 msi 包直接安装 ( 注 : 选择端口时 , 不能先用已经被 IIS 占用了的端口 , 比如果 IIS 已经占用了 80 端口 , 就不用使用 80 端口了, 默认安装Apache, 如果是安装为"only for the Current User, on Port 8080, when started Manually"
则可以httpd -k install 来手工安装为windows 服务, httpd -k uninstall 卸载服务
相关命令: httpd -k [start|stop|restart] )
2. PHP, 直接安装就好 , 不用配置
win2003+apach 2.2+php 5.3(zip)
参考以下文件配置成功:
在Windows 系统上使用Apache2.2 上模块化安装PHP5 .3
PHP5 .3 增加了一些功能,如namespace ,静态迟绑定等。
本篇文章将帮您如何安装PHP5 .3 ,现在我们开始。
1
下载php5 .3 和apache2.2
php5 .3 一定要下载VC6 的,VC9 的不能使用apache ,只能用iis
2
将此压缩包解压到d:/php 下,也可以解压其它盘的目录
安装apache2.2
3 配置php5 .3
在d:/php 目录下把php.ini-development 文件改名为php.ini
这是PHP 5.3 的一个改变,另外一个文件php.ini-production 是用于产品运行的典型配置。
接着我们打开php.ini 文件,定义扩展包的路径。
查找“extension_dir” ,修改为:
extension_dir = “d:/php/ext”
然后,我们打开一些必要的扩展包,即去掉一些扩展包的文件名的分号,以下笔者的配置:
extension=php_curl.dll (如果开启这个,会提示找不到模块)
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
extension=php_xmlrpc.dll
4 配置Apache2.2
打开Apache 的httpd.conf 文件,增加默认首页:
DirectoryIndex index.php index.html
在126 行左右,即LoadModule 的最后加入:
LoadModule php5_module "d:/php/php5apache2_2.dll"
AddType application/x-httpd-php .php
PHPIniDir "d:/php"
5 测试
在apache 的htdocs 目录中新建index.php
输入内容:
<?php
phpinfo();
?>
然后重启Apache2 。输入http://localhost 即可访问
附录参考:
http://pcvc.net/archive/2008/8/26/90.html
http://tech.163.com/06/0206/11/299AMBLT0009159K_2.html
附录: http://xiaogangzhang.blog.hexun.com/23268027_d.html