6

有没有办法在 PHP 中启用线程安全而无需重新编译,或者使用 YUM 来做到这一点?

我正在尝试安装 pthreads,它要求 PHP 已经用--enable-maintainer-zts. 但是,我不想重新编译,因为我想使用 yum 管理我的 PHP 堆栈。我目前正在使用 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。

4

2 回答 2

2

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

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

于 2013-03-21T23:25:07.023 回答
1

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

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

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

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

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

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

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

希望这能让你继续前进:)

于 2013-03-22T07:50:43.060 回答