首页 > Web, 服务器运维 > 在win2008R2下安装配置Apache2.2+PHP5.4环境问题解说篇
201503月26

在win2008R2下安装配置Apache2.2+PHP5.4环境问题解说篇

一、无法加载PHP模块,Apache无法正常启动。

1、当在 apache 的httpd 中加上如下语句后就不能打开服务了

LoadModule php5_module D:/websoft/php/php5apache2.dll

PHPIniDir "D:/websoft/php"

日志提示无法加载PHP模块,Apache无法正常启动。

原因:查看PHP for Windows官网,官网原话如下:

Which version do I choose?

If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP

If you are using PHP with IIS you should use the VC9 versions of PHP

VC6 Versions are compiled with the legacy Visual Studio 6 compiler

VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability. The VC9 versions require you to have the Microsoft 2008 C++ Runtime (x86) or the Microsoft 2008 C++ Runtime (x64) installed

Do NOT use VC9 version with apache.org binaries

VC9 versions of Apache can be fetched at Apache Lounge. We use their binaries to build the Apache SAPIs.

       意思是:如果在windows下用的apache+PHP,就需要下载VC6版本的PHP(如果你没有安装 Visual Studio 2008)。VC9使用Visual Studio 2008编译,并且改进了性能和稳定性。VC9版本的PHP需要你安装Microsoft 2008 C++ Runtime。

 

2、关于V6、VC9 和VC11

VC6不说了,系统一般是自带支持的。

VC9和VC11是PHP的最新版本(这两个版本分别通过Visual Studio 2008和Visual Studio 2012编译),其中包含了对于性能和稳定性的改进。

VC9版本要求用户安装Microsoft Visual C++ 2008 SP1 Redistributable Package(x86 | x64)

x86:http://www.microsoft.com/en-us/download/details.aspx?id=5582

x64:http://www.microsoft.com/en-us/download/details.aspx?id=15336

VC11版本要求用户安装Visual C++ Redistributable for Visual Studio 2012(x86 | x64)

x86:http://www.microsoft.com/en-us/download/details.aspx?id=30679

x64:http://www.microsoft.com/en-us/download/details.aspx?id=30679

 

二、关于php Thread Safe(线程安全)和Non Thread Safe(非线程安全)

        从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程 的工作方式不同的是Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程的基础 之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP扩 展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。因此在IIS下CGI模式才是 PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。

为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求 就重开一个进程。同时FastCGI也可以允许几个进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。

因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。

       在Thread Safe版本下是具有php5apache2_2.dll的,而None Thread Safe版本 没有这个文件一般只用于fastcgi 所以不需要这个文件。

fastcgi下载链接:http://www.iis.net/downloads/microsoft/fastcgi-for-iis

 

三、关于Zend支持

1、配置zend_loader扩展,解压ZendGuardLoader,在php.ini底部中加入如下代码:

[Zend.loader]

zend_loader.enable=1

zend_loader.disable_licensing=1

zend_loader.obfuscation_level_support=3

zend_loader.license_path=

zend_extension="ZendGuardLoader路径/ZendLoader.dll"

 

2、Zend Guard Loader:从PHP5.3开始如果要支持ZendGuard加密的PHP代码,必须安装Zend Guard Loader,老的zend optimizer将不被支持。

clip_image001

注意:phpinfo测试的时候,如果有上图类似with Zend Guard Loader v3.3出现表示Zend Guard Loader加载成功,如果没有则Zend Guard Loader加载失败。

 

3、Windows 下面的 Zend Guard Loader 不支持php5.3/5.4 Thread Safe(线程安全)的,而,php5.3/5.4 Non Thread Safe(非线程安全)又不支持 apache2。

所以如果遇到apache错误日志提示“Failed loading…ZendLoader.dll”,就是说ZendLoader很悲催的没有被加载。(Zend Optimizer适用于php 5.2.x,5.3以上就变成Zend Loader了)

原因就是:Windows下,Zend Loader only works with NTS PHP!

就是说,只支持NTS版的php,TS版的不支持,所以遇到此问题可以检查一下php的版本。

 

4、NTS和TS的区别:

NTS:Non Thread Safe

非安全线程, 在执行时不进行线程(Thread)安全检查。

TS:Thread Safe

安全线程, 执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。

分享按钮

文章作者:yupong
本文地址:http://bugnotes.net/web/win2008-php-zend.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

本文目前尚无任何评论.

发表评论