动态配置PHP以获得线程安全--enable-maintainer-zts,还是使用yum来安装pthreads?

时间:2013-03-21 23:12:59

标签: php multithreading compilation yum

有没有办法在不重新编译的情况下在PHP中启用线程安全,或者使用YUM来执行此操作?

我正在尝试安装pthreads,它需要使用--enable-maintainer-zts编译PHP。但是,我没有重新编译,因为我想使用yum管理我的PHP堆栈。我目前正在使用REMI回购。我注意到有一个包php-zts,但是,没有一个可用于我的PHP版4.4,我找不到php-zts的源RPM。

有没有办法可以在PHP中使用yum并启用线程安全,所以我可以使用

安装pThread
#pecl install channel://pecl.php.net/pthreads-0.0.42

downloading pthreads-0.0.42.tgz ...
Starting to download pthreads-0.0.42.tgz (53,755 bytes)
.............done: 53,755 bytes
33 source files, building
running: phpize
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
building in /var/tmp/pear-build-rootkThpG6/pthreads-0.0.42
running: /var/tmp/pthreads/configure

...

checking whether to enable Threading API... yes, shared
checking checking for ZTS... configure: error: pthreads requires ZTS, please re-compile PHP with ZTS enabled
ERROR: `/var/tmp/pthreads/configure' failed

正如您所看到的那样失败,因为PHP没有启用ZTS。

2 个答案:

答案 0 :(得分:2)

ZTS可用性是在编译期间确定的,所以不 - 你不能动态启用和/或禁用它。

您可以通过yum或其他软件包管理器安装pThreads,具体取决于您的发行版,但请注意,“可能”并不一定意味着它是您可用的选项。这取决于您的软件存储库是否有这样的软件包可用,并依赖于另一个启用了ZTS的PHP构建。我非常怀疑情况会是这样。

答案 1 :(得分:1)

不幸的是,CLI的软件包维护者在大多数unix软件包中都没有启用线程安全性。它有时为worker mpm apache启用,但并不总是包含完整的构建环境(这样pecl将无法工作)。

简而言之,没有办法在运行时启用ZTS,它是一个构建时选项,在编译源代码后无法对构建进行更改。

但是,为自己安装副本并不是很难。

您采取的路径很大程度上取决于您对发行版的体验和预期用途。

如果您希望使用线程安全版本覆盖系统安装,可以使用一些信息http://pthreads.org/building

如果您希望构建一个独立的安装,可以在pthreads.org的构建页面上找到一些信息,另外,我一直在试验RPM,http://github.com/krakjoe/spex包含一个rpmbuild文件,该文件将滚动副本掌握和掌握pthreads到/ opt / php-pthreads与完整的构建环境,包括和所有的花里胡哨,在rpmbuild版本中没有apache支持,因为它会使它更复杂和巨大,它确实包括fpm(也支持)

你是我遇到过的第一个我实际建议使用rpmbuild的人,因为你可以保留其他VM的RPM并且只需要经历一次(直到下一次更新为止) ,它的缺点是,它使用PHP的前沿代码,目前处于测试版......

希望能让你前进:)