解决IIS下PHP遇到Service Unavailable问题

由于apache在windows下性能有限,经常出问题,而且服务器又换不了linux,所以最近一直在研究IIS+PHP的搭配,在2年前曾经使用过这种环境,一直没出过什么问题,但最近搭建时遇到了不少问题。首次根据网上的方法配置完成后,网站是可以正常访问的,但是一旦重启服务器或者重启IIS,网站则陷入问题中,那就是访问时提示:Service Unavailable。如下图:

2015-02-26_145934

究其原因是因为php5isapi.dll没有正常加载:

2015-02-26_150222

查了网上各种方法,有的说是PHP目录权限问题、有的说是没加环境变量等等,但所有解决方法都试下来以后发现都无法正常解决问题。

但在一篇文章中得到了一个意外的收获,文章中介绍:“可以将ISAPI 筛选器下的php5isapi.dll选项删除,网站一样是可以访问的”,虽然通过他这个方法我没能解决问题,但是让我遇到了另外一个问题,删除ISAPI 筛选器下的php5isapi.dll后再次访问网站提示“内存位置访问无效”。跟着这个问题我在网络上搜索了一下,主要原因是DLL扩展加载失败。将php.ini中 display_startup_errors = Off 改为display_startup_errors = On,就可以看出具体是加载哪个DLL文件失败了。

修改php.ini后、重启IIS服务,再次访问网站,我们便看到服务器弹出了一个提示框,如下图:

2015-02-26_151054

再次在网络上搜索,在php.ini中将所有报错的模块注释掉。

2015-02-26_151946

并且重新增加了ISAPI 筛选器下的 php5isapi.dll。再次重启IIS后,一切访问正常。php5isapi.dll也加载正常了。

2015-02-26_152129

2015-02-26_152152


最后做下总结,IIS+PHP(ISAPI)方式安装,出现 Service Unavailable 的情况有以下几种,分别排除后即可解决问题。

1、PHP目录下php5isapi.dll没有IIS来宾账户访问权限,根据IIS默认网站文件夹的权限设置即可。

2、php5isapi.dll启动后根据php.ini所加载的一些DLL无法正常加载,就是本文所提。

发表评论

电子邮件地址不会被公开。 必填项已用*标注