环境架设   /   1,562

最近在centos上编译安装apache,nginx,,mysql遇到不少问题,各种状况频繁发生。无论Google,Baidu,甚至是bing,很多问题其实是很难找到正确答案的,搜到的很多信息,要么不是你想要的版本,要么对方没提供相应的系统信息,编译软件信息。搞得你测试来测试去都没办法完成。

首先列一下系统环境:CentOS6.3(64位),MYSQL5.5.24,httpd-2.4.3,先不提php5的版本。编译顺序是MYSQL5.5.24——>httpd-2.4.3——>php5.x.x

如果要在Linux 上运行Zend Guard Loader时,编译的PHP5.3不能启用Thread Safe模式,也就是禁用Thread Safe,使其状态为Thread Safety:disabled

查看自己的php5.3是否是禁用Thread Safe状态(Thread Safety:disabled),那么可以通过以下几种方式查看:

Thread Safety:disabled

01.通过

<?php phpinfo(); ?>

02.查看扩展存放路径名,如果是no-debug-non-zts-20090626 之类的,包含non-zts,则Thread Safe 是Disabled (未启用)状态的。如果是no-debug-zts-20090626 之类的则是enabled(启用)状态的。通常路径在×××/lib/php/extensions下。

03.如果编译PHP5时没有禁用–disable-cli 项的话,还可以通过php -verion、php -i和php -m查看相关信息是否禁用了Thread Safe(Thread Safety:disabled)

我首先使用的是php-5.3.8,编译选项都是常见选项,在编译完成后安装各类扩展,比如memcache,memcached,eaccelerato,suhosin,… … 等等最后一步安装Zend Guard Loader。

tar -zxvf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz
mkdir -p /usr/local/zend/
cp ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x/ZendGuardLoader.so /usr/local/zend/ZendGuardLoader.so

问题来了,安装之后phpinfo()里面没有ZendGuardLoader载入的信息,查看php -m,出现ZendGuardLoader.so无法读取的错误。网上查找各类信息,最后有人提出需要php的Thread Safety模式为禁用状态。于是发现phpinfo()中,我的信息是enable.
但是怎么才能让php-5.3.8编译出来是Thread Safe:disable,尝试了各种编译选项,./configure –help查看编译信息,只用启用Thread Safe选项,而没有禁用选项。有人提出选择之前编译apache的时候apache 的MPM为prefork模式,于是又尝试apache 的MPM为prefork,然后继续编译php-5.3.8,仍旧是enable启用状态。

去php官网,发现目前在PHP官网上看到最新的稳定版分别是PHP 5.4.8 和 PHP 5.3.18。

也就是PHP 5.4.x 系列和 PHP 5.3.1x系列。而我用的版本是PHP 5.3.x不是PHP 5.3.1x。死马当活马医,换成PHP 5.3.18继续试,重新编译apache,让apache的MPM为prefork模式,这次居然OK了,Thread Safe被禁用。

赶紧安装Zend Guard Loader,同样OK,问题就这样解决了。

我的系统是centos6.3(64位)经过测试,之前安装的是PHP 5.3.8,无论怎么编译,甚至无论apache的MPM为prefork模式还是MPM为worker模式,安装完毕后,默认就都是Thread Safety模式,无法改变。其他的版本如PHP 5.3.5、PHP 5.3.6、PHP 5.3.7没有测试。

而改为PHP 5.3.1x以后,是有启用Thread Safety的选项的,默认是关闭的,也就是NTS模式。
隐约记得,PHP 5.4.x 系列也是可以关闭的。

特别情况是:
我的笔记本安装的是ubuntu12.10,然后安装了一个xampp,查看了下,是PHP 5.3.x系列。但是它的Thread Safety居然是disable

版本要求:

  • 01.Apache2.4.x + PHP 5.3.1x
  • 02.Apache编译需要MPM为prefork模式
  • 03.OK

另外记得查看ZendGuardLoader的文档README.txt,里面有两项重要的安装要求:

6. If you use Zend debugger as well, please make sure to load it after the Zend guard Loader
7. If you use ioncube loader, please make sure to load it before Zend guard Loader

思路是这货的文章上看到的,但是此文并无法解决问题。http://www.jsxubar.info/zend-guard-loader-zts-mpm.html

网络发现者(aiwei.us)是梁道科技旗下以企业建站,微信开发,视觉设计为主要服务项目的互联网品牌。

我们为企业提供各类互联网平台项目的咨询顾问服务。依靠丰富的互联网实践经验,我们为企业从项目可行性分析,执行策略及方案等方方面面提供合理化建议。