【问题标题】:Dynamically configure PHP for thread safety --enable-maintainer-zts, or use yum to install pthreads?动态配置PHP线程安全--enable-maintainer-zts,还是使用yum安装pthreads?
【发布时间】:2013-03-21 23:12:58
【问题描述】:

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

我正在尝试安装 pthreads,它需要使用 --enable-maintainer-zts 编译 PHP。但是,我不想重新编译,因为我想使用 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。

【问题讨论】:

标签: php multithreading compilation yum


【解决方案1】:

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

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

【讨论】:

  • 是否可以克隆我的虚拟机,然后在启用 ZTS 的情况下编译 PHP,然后为 pThreads 构建 .so。然后,将 .so 复制到原来的机器上,在没有启用 ZTS 的情况下编译 PHP 并实际运行?
  • @Dan no 那也行不通。如果你这样做,符号将不匹配。
【解决方案2】:

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

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

不过,为自己安装一个副本并不难。

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

如果你想用线程安全版本覆盖你的系统安装,有一些信息http://pthreads.org/building

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

您是我遇到的第一个建议使用 rpmbuild 的人,因为您可以为其他虚拟机保留 RPM,并且只需执行一次(直到下一次更新) ,这样做的缺点是,它使用了来自 PHP 的前沿代码,目前处于测试阶段......

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

【讨论】:

  • 感谢您的提醒,我会在 gh-pages 上找回它
猜你喜欢
  • 2011-08-13
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
相关资源
最近更新 更多