Windows Server 2008 配置IIS+PHP

问题:php

最近要上线一个PHP写成的MVC项目,发现Windows Server 2008安装的仍是PHP5.2,不少语法不支持。web

尝试的一些解决方案:redis

1.将PHP升级为5.6,可是须要作好IIS和PHP的配置,由于IIS还承担了其余几个Web项目的运行,因此这个方案也是目前最稳妥的办法。api

2.在Windows Server 2008上安装Apache或者Nginx,由于Apache或者Nginx和PHP搭配更佳,可是Apache在Windows Server 2008上表现很差,另外这个方案还有个缺点是另外须要配置子域名等,以前没有研究过这方面,因此这个方案备选。浏览器

最终解决方案:安全

1.在安装PHP5.6以前,先检查一下是否有Visual C++ 2012运行环境(发行包)。若是没有,先在微软下载中心下载安装。bash

这里提供下载连接:x86版本x64版本ide

2.在PHP官网下载PHP5.6,解压缩到任意盘符任意文件夹,固然,若是你想在IIS配置上“偷个懒”的话,能够把原来PHP文件夹更名为PHP5.2,把PHP5.6改成PHP,来替换原来的路径。函数

接下来是一些较为复杂的步骤,请坐稳了,咱们要加速了~this

3.在php.ini中修改或确保要有如下配置:

cgi.force_redirect = 0

配置的注释上写:

cgi.force_redirect is necessary to provide security running PHP as a CGI under most web servers. Left undefined, PHP turns this on by default. You can turn it off here AT YOUR OWN RISK. You CAN safely turn this off for IIS, in fact, you MUST.

其实,本意是但愿提供安全的CGI,可是IIS下,你仍是必须把TA关了。

 

cgi.fix_pathinfo=1

配置的注释上写:

cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting of zero causes PHP to behave as before. Default is 1. You should fix your scripts to use SCRIPT_FILENAME rather than PATH_TRANSLATED.

这里没有IIS,因此设置为1便可。

 

fastcgi.impersonate = 1

配置的注释上写:

FastCGI under IIS (on WINNT based OS) supports the ability to impersonate security tokens of the calling client. This allows IIS to define the security context that the request runs under. mod_fastcgi under Apache does not currently support this feature (03/17/2002)

Set to 1 if running under IIS. Default is zero.

这里很感动此处的注释,把坑都说明清楚了,IIS下,让你设置为1就应该设置为1。

 

date.timezone = Asia/Shanghai

时区设置为亚洲上海,但实际上这个配置彷佛只做用于你用phpinfo()函数来查看PHP版本,真要用到时区在项目里再写一句声明也能够,已亲测。

4.在IIS中添加程序映射

 

 这一步其实不难理解,就是让全部的PHP文件都用CGI来执行,因此把php-cgi.exe这个可执行文件的路径填写进去就能够了。

原来在ISAPI限制和CGI限制里有原来PHP5.2的条款,由于PHP5.2和PHP5.6不同,5.6版本已经没有php5isapi.dll这个文件了,也就是说5.6版本已经放弃dll而采用cgi可执行文件,因此能够把这条删除或者设置为“不容许”。若是要填写就填写php-cgi.exe的路径,记得加引号。

至此,已经能够在浏览器中看到这个熟悉的页面了。

 总结:

其实,咱们原本要放弃这个方案的,由于中午被一个500状态码搞得焦头烂额,不知道问题出在哪里,后来又出现了php-cgi.exe - FastCGI 进程意外退出没法定位程序输入点 php5ts.dll这样的错误,后来我直接运行了php-cgi.exe,发如今命令行中出现的路径并非PHP5.6的文件夹路径,才发现问题。因而我直接把PHP5.6文件夹命名为原来PHP文件夹的名称,问题顺利解决。但问题是没了,彷佛仍是遗留下来了一个疑点,究竟少了哪一步?之后若是IIS从零配置PHP,仍是会遇到这个问题。

相关文章
相关标签/搜索