是否有一种方法可以在不重新编译的情况下启用PHP中的线程安全,或者使用YUM来做到这一点?
我正在尝试安装pthreads,它需要PHP已经与--enable-maintainer-zts
编译。然而,我不需要重新编译,因为我想管理我的PHP堆栈使用yum。我目前正在使用REMI回购。我注意到有一个PHP -zts包,但是,我的PHP 4.4版本没有一个可用的包,而且我找不到PHP -zts的源RPM。
是否有一种方法,我可以使用yum和启用线程安全在PHP,所以我可以安装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。
ZTS的可用性是在编译时确定的,所以你不能动态地启用和/或禁用它。
根据您的发行版,您可以通过yum或其他包管理器安装pThreads,但请注意,"可能"并不一定意味着在您的情况下它是一个可用的选项。这取决于您的软件存储库是否有这样一个可用的包,它依赖于另一个启用了ZTS的PHP构建。我非常怀疑情况会是这样。
不幸的是,CLI的包维护者没有在大多数unix包中启用线程安全。它有时为worker mpm apache启用,但并不总是包含完整的构建环境(这样pecl将无法工作)。
简而言之,没有办法在运行时启用ZTS,它是一个构建时选项,使得在编译源代码后不可能对构建进行更改。
然而,为自己安装一个副本并不难。
您选择的路径在很大程度上取决于您使用发行版的经验和您的预期用途。
如果您希望用线程安全的版本覆盖您的系统安装,这里有一些信息http://pthreads.org/building
如果你想构建一个独立的安装,可以在pthreads.org的构建页面上找到一些信息,此外,我一直在尝试使用RPM, http://github.com/krakjoe/spex包含一个rpmbuild文件,它将主pthreads和主pthreads的副本滚到/opt/php-pthreads中,包含所有的铃声和口哨,在rpmbuild版本中不支持apache,因为它会使它更复杂和庞大。它包含FPM(也支持)。
你是我遇到的第一个我实际上可以建议使用rpmbuild的人,因为你可以为其他VM保留RPM,只需要经历一次(直到下一次更新),这样做的缺点是,它使用了PHP的前沿代码,目前处于测试阶段…
希望这篇文章能帮到你:)