小编在配置的一台Windows 2008 R2 Service Pack 1的服务器,IIS是7.5版本。PHP使用的php-5.3.8-nts-Win32-VC9-x86.zip,使用Zip解压的方式进行的安装。PHP发生未知FastCGI错误,错误代码为0x800736b,下面看下具体的原因分析及解决办法。
[问题起因]
安装配置的过程就不详细说明了,但是在安装配置之后,运行php测试页面时出现错误:发生未知FastCGI错误,错误代码:0x800736b1。这是什么原因,陷入了郁闷之中。
多次检查了安装配置的过程,又对照的PHP.net官方网站的说明,均未发现有任何问题,通过官网找了一下,也没有发现其它人有类似的问题。
[php.exe直接运行居然失败]
php除了配置在IIS上之外,还可以单独来作为系统脚本使用,于是想到了,直接在cmd.exe下面执行php.exe,看看是什么效果。结果大吃一惊,提示如下:
D:\soft\php-5.3.27-nts-Win32-VC9-x86>php
应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.exe 工具。
[使用sxstrace.exe进行调试]
连PHP本身直接运行都运行不了,那肯定在IIS上也是无法运行的了!那问题到底在哪里呢,根据上面的提示,使用 sxstrace.exe 工具来作了检测,测试之后得到一个文件。这个不知道是什么编码的文件,里面有很多乱码,也有一部分可识别的字符,其中有两次出现了tzres.dll这个文件。虽然调试结果文件上没有明确说明就是它的问题,但我还是这样怀疑了。
[倒霉的tzres.dll]
检查了一下tzres.dll文件是否存在?存在。是否注册了?regsvr32再注册一下,问题依旧。是不是权限不正确?加了一个everyone可读可执行,问题仍旧。
[网上说是VC9的运行环境的问题]
后来在网上多找到了找,看到有人说是VC9的运行环境有问题,于是按照它给的地址进行下载安装。下载到的文件是“Microsoft Visual C++ 2008 Redistributable Package (x64)”,文件名为“vcredist_x64.exe”。安装时提示“修复”Or“卸载”,我晕,很明显系统上已经有这个东西。于是还是选择修复一下吧,死马当活马医了。修复完了不行,于是不甘心,又把服务器重启了一遍,仍然搞不定……
[Visual C++ 2008 Runtime x86]
后来突发灵感,因为我下载的php是32位的(上面已经提到过),那是不是这个VC9的编译运行环境也要用32位的呢?(上一步用是64位的Runtime环境)终于找到一个文件“vcredist_x86.exe”,它的软件名称是Microsoft Visual C++ 2008 Redistributable Package (x86)。一开始还在想,它会不会与前面安装的那个64位的有冲突,心里很忐忑。尝试安装它,居然没有提示错误,重新刷新之前的php测试页面,phpinfo跃入眼帘,完成!
希望本文对遇到“发生未知 FastCGI 错误”,错误代码为0x800736b1的朋友有所帮助。