【问题标题】:How to install PHP pthreads extension on Ubuntu? [closed]如何在 Ubuntu 上安装 PHP pthreads 扩展? [关闭]
【发布时间】:2013-04-03 08:55:49
【问题描述】:

我想在 Ubuntu 上安装“pthreads”PHP 扩展。我正在使用 Ubuntu 12.04.1 LTS。如果需要,我可以升级。我真的不想从源代码编译任何东西。例如,从源代码重新编译 PHP 听起来对我来说是一个可怕的想法。

在我看来,最好的选择是使用aptitude 命令安装这个扩展。例如aptitude install php5-mysql。另一个好主意是使用 pecl pecl install pthreads。但是由于以下错误,这对我不起作用:

检查 ZTS... 配置:错误:pthreads 需要 ZTS,请在启用 ZTS 的情况下重新编译 PHP

让我解释一下为什么我不喜欢从源代码重新编译 PHP 的想法:

  • 我想我应该卸载原来的 PHP 包和所有依赖项。因为如果我通过标准 PHP 编译它,那么任何包更新都会覆盖我的更改。是的,另一种选择是阻止 PHP 更新。无论如何,这会引入一些额外的工作并使设置更加复杂。我们在分布式团队中工作。而且我不希望其他人在生产服务器上处理这种复杂的设置。
  • 我想在服务器上安装更新。而且我不想因为安全修复等原因重新编译 PHP。
  • 我不想在生产服务器上编译任何东西并多次这样做。然后我应该构建自己的包并用新版本等更新它们。抱歉,我不够聪明,无法做到这一点。可能会在 2-3 年内,但不是现在。因为这里有很多事情要记住。例如,如何用自定义包替换标准 PHP 包,同时仍然满足所有依赖项。

一些参考资料:

这篇文章似乎是旧的而不是实际的。我会保留它仅供参考。而且我想它应该被理解为“3 年前 PHP 不是线程安全的”。

【问题讨论】:

  • 我猜你必须编译它。我在网上找到的所有资源都说你必须这样做。顺便说一句,这并不难。
  • 同意@BartFriederichs,如果你设法做到了,请告诉它如何。
  • @BartFriederichs,感谢您的评论。我同意这并不难。问题是如何在多台生产服务器上安装它。完美地我应该创建我自己的包,把它放在我自己的发行版中,然后用我的发行版中的aptitude 将它安装在服务器上。但我不会为 MySQL 驱动程序这样做,因为这已经完成了。而且我想相信我不是唯一使用 pthreads 的人,也应该对 pthreads 进行相同的设置。
  • @confiq,谢谢。我没有失去希望。
  • 如果您有多个服务器,您可以复制.so 文件。或者选择一个为你打包的发行版(不知道它们是否存在)。

标签: php ubuntu pthreads ubuntu-12.04


【解决方案1】:

ZTS:[Z] 结束 [T] 线程 [S] 安全。

ZTS 是一个编译时选项,不能在运行时启用。它允许通常在单个线程中执行的 PHP 解释器在多个线程中执行,每个线程都有自己独立的解释器实例。

您的唯一选择似乎是全新构建,然后使用包构建工具进行分发。

我无法直接建议创建 deb,但是,创建 rpm 非常简单,https://github.com/krakjoe/spex 有一个起点,然后您可以使用 alien 将 RPM 转换为 deb,如果你不知道如何直接创建 deb 包。

从源代码构建将是不可避免的,除非您可以找到一些具有 PHP 线程安全构建的存储库,以及完整的构建环境。为此,http://pthreads.org/building 的信息可能对您有用。构建 PHP 并不难,也不需要很多小时,在现代硬件上,您可以在不到一分钟的时间内完成构建。您可以而且应该借此机会减少安装中的脂肪。

附带说明,您引用的关于 PHP 不是线程安全的文章是 2008 年的,这是非常错误的。核心是线程安全的,有一些扩展本质上是不安全的(不是抽象得不好,但根本不适合)。

【讨论】:

  • 感谢您的评论,真的很有帮助。这让我相信我正在朝着正确的方向前进;)
  • 链接断开..请修复...
  • ZTS 和线程安全二进制文件有什么区别,您可以从这里下载:windows.php.net/download
  • 嗨@Joe,“建筑”链接仍然断开。我会直接编辑您的帖子,但找不到想要的链接。
  • Debian 和 Ubuntu 可以使用 dpkg -i packages.rpm 安装 .rpm 软件包。
【解决方案2】:

看来,Ubuntu 在官方存储库中没有线程安全 PHP 的包。 Pthreads 扩展需要 ZTS。因此,您有两种选择:

  1. 自己编译:
  2. 在某个地方找到一个 .deb 包,例如其他类 Debian 系统的存储库。

我会使用“checkintsall”实用程序自己编译和打包它。因此,Apt 将有能力跟踪 PHP 版本。我还要求 Canonical 提供 ZTS PHP 的软件包。

【讨论】:

  • 感谢您的回答。我认为很多人在 Ubuntu 上安装 pthread 时应该这样做。这就是为什么我认为应该有一些解决方案。但事实证明这是一个相当复杂的问题。而且我猜 Canonical 并没有故意包含线程安全的 PHP 二进制文件。但是可能有一些项目已经完成了吗?
  • 关于检查安装的注意事项。这将有助于保持可维护的数据包缓存。使用 checkinstall 也可以设置相应的版本,因为将 deb 添加到已安装的包中可能会出现问题。最好与apt-cache show <collision-packages-during-install> 联系以获取所需的版本,或者将其与您的系统版本apt-cache show php5 | grep Version 一起打包(checkinstall)。
猜你喜欢
  • 2013-01-08
  • 2017-06-24
  • 2013-12-17
  • 2014-01-29
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
相关资源
最近更新 更多