今天把服务器上的 PHP5.6 降到 5.3,其实就是去 php 官网重新下载一个 binary,结果发现还是不少问题。特此记下来。
php binary 下载
http://windows.php.net/downloads/releases/archives/
php.exe 运行 先把 binary 下的 php.ini-production 改名至 php.ini 然后放到 C:Windows 下,然后 php.exe 理论上就可以直接运行了。但其实 php5.3 的 bin 是使用 VC9 的库编译的,而 Windows Server 2008 自带 VC11 的库而没有 VC9 的库而出现错误,最后当然是直接去微软的官网下载了一个安装了就完事。下面具体分享下找到并解决错误的过程。
发现问题/解决问题
无法执行程序“php.exe”:应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行sxstrace.exe工具
一开始我是直接在 powerShell 里面运行 php.exe 的,然后就报了上面的错误。里面提及到应用程序事件日志,具体所在的地方是:
_开始->所有程序->管理工具->事件查看器
_在事件查看器中,展开 Windows 日志分类,双击应用程序,右边栏就可以看到所有应用程序的日志:
里面有详细描述导致这个错误的原因是因为缺失了某个程序集,里面包含了程序集的详细信息。通过具体谷歌该程序集的版本号,马上就找到了程序集安装器的下载地址:
https://npackd.appspot.com/p/com.microsoft.VisualCPPRedistributable/9.0.21022.8
真是得来全不费工夫。
IIS配置
https://www.howtogeek.com/50432/how-to-install-php-on-iis-7-for-windows-server-2008/
链接的这篇文章写的很详细,基本上照着做就可以了,大概归纳一下步骤
1. 配置 php.ini,主要把时区 (date.timezone) 和 extension_dir 配置好。
2. 添加 fastcgi 应用程序,在 IIS 中 fastcgi 的控制台里增加应用程序,链接到 php-cgi.exe 这个可执行文件
3. 添加映射,把所有 *.php 的请求映射到 php-cgi.exe 上执行。
4. 在 powershell 中运行 iisreset 重置 iis
用户权限
这个概念在 Linux 下很容易理解,也很容易设定,而由于 Windows 下用户概念不清晰,所以配置的时候往往会忽略。
大意就是通过网络服务访问服务器的某个文件的时候,实质上是使用某个用户的权限对这个文件进行读写运行的操作,在 Linux 下,一般情况网络用户是使用 apache 用户来访问的,而他对所有文件有可读权限,但对于一些特殊的文件(夹),如保存 session 或者 cache 的文件夹,用户则需要有写的权限。而其实,这些情况一样适用在 Windows server 上。
http://blog.sina.com.cn/s/blog_3f2ef1180102vuuj.html
链接的文章具体说了在 Windows 系统下对于网络服务的权限的知识。大概总结一下就是需要对特殊的文件夹加入 IUSR 用户的读写权限。
PHPManager (2017.05.06 更新)
直接上链接 https://phpmanager.codeplex.com
这是个 IIS 的插件,提供图形化界面配置 PHP 环境,可以说得上是一个神器。不过目前codeplex 托管平台即将关闭服务器,暂时未知 phpmanager 会迁移到哪里去。
安装完后在 IIS 的控制平台就可以见到 PHPManager 的图标了
双击后可以看到设定界面,如果之前没有使用 FastCGI 设定 PHP 环境,这里应该会显示没有可用的 PHP,如下图
这时候点击 Register new PHP version,只要选择对应 php binary 文件夹下的 php-cgi.exe 程序即可
这时候 PHP Manager 会自动识别同一个文件夹下的 php.ini 文件,所有的配置已经扩展都可以通过图形界面查看以及配置
另外还有一点,就是可以继续点击 Register new PHP version,可以在新增一个不同版本的PHP。步骤跟上面一样,选择对应 PHP binary 下的 php-cgi.exe 程序即可。配置成功后,点击 Change PHP version 就可以见到有多个 PHP 版本可以选择了
其实 PHP Manager 帮我们做的事情也不复杂,它帮我们创建好对应版本的 FastCGI 应用以及映射,然后根据设定在不同的主机 (Host) 上应用不同的 FastCGI 应用以达到同一台主机上运行多个 PHP 环境