在Linux上编译PHP还是使用apt-get/yum安装?

3
多年来,我一直使用我想要的配置选项编译PHP。我从源代码编译我使用的扩展。与从apt-get或yum等包管理器安装相比,这样做有什么优势呢?我认为这也会给我一个更精简的二进制文件。我注意到存储库中有PHP模块,例如“php53-gd”。如果我想要的东西(例如用于PHP的cURL)没有可用的软件包怎么办?
我理解编译的缺点,例如需要根据我的配置选项下载/安装依赖项。我并不真正关心这些。
所以问题是:
在Linux上编译PHP还是只使用apt-get/yum?我能否从存储库中获得所有所需的内容?是否还有人从源代码编译它?
感谢任何见解!谢谢。
5个回答

4
每次我都从源代码编译。手动编译时,整理与编译相关的问题并不困难。例如,我的“./configure”设置保存在一个版本控制文件中,因此当PHP的新版本稳定并且我准备好进行切换时,我会下载并提取该文件,然后运行以下命令:
./configure `sh /path/to/my/configure/php.sh`

不算太难。而且因为它在版本控制中,我可以添加说明为什么添加或删除了一个模块。
手动编译的另一个好处是它允许我尽可能地保持PHP的占用空间最小化。我传递了--disable-all标志,然后再添加我需要的模块。然而,这种极简主义方法有一个缺点,最近我需要安装Magento,所以我必须重新编译并使用--enable-hash--with-mcrypt标志。即使我需要添加新的标志,也不难将它们添加到配置文件并重新编译。

我喜欢版本控制配置参数的想法。当您移动到新机器时,您是否还维护需要安装的软件包列表? - Matthew Scragg
不需要,但是PHP在我的开发服务器上编译的方式就是在生产服务器上编译的方式,所以只需要一个配置文件。你最不想做的事情就是开发代码,所有东西都通过了QA,然后推送到生产环境,结果发现某个模块不可用。 - Mike Purcell

2
从源代码编译有一些小问题:
  1. 有数百个配置参数和标志。您可能不知道需要使用的最佳参数。
  2. 如果您依赖于apt-get的PHP,则可以确保在服务器上设置自动升级后,您将获得最新的补丁程序和安全更新。
  3. php.ini的配置因人而异。有时,您的操作系统可能会为您决定一些默认值,这些默认值可能与系统的其余部分更好地配合。
  4. 像xdebug或其他软件包这样的扩展的安装要比apt容易得多。
然而,如果您想学习的话,从头开始编译php是值得的。此外,如果您不使用其中的某些部分,则始终可以在配置中禁用它们-但是这可能对性能没有太大影响。

我已经编译它多年了。对我来说保持最新状态并不难。我经常从源安装扩展。我更不愿意使用apt-get,但考虑过尝试它。 - Matthew Scragg
@MatthewScragg,抱歉,我没有仔细阅读你的问题。我误以为你是一个从未编译过PHP的人。如果到目前为止它已经运行良好,我不认为你有任何理由想要改变它 :) - skyronic

1

我只为特定的需求编译了php,例如:

  • 非常小的硬盘空间,因此需要一个极简版本的php

和/或

  • 仅需要几个特定的模块或扩展

和/或

  • 需要用于特定应用程序

和/或

  • 需要优化性能:在使用它的机器上编译时,如果使用编译选项来获得真正针对您的系统进行调整的版本,则可以实现一些性能改进

和/或

  • 需要在同一台机器上使用多个不同的php版本。

和/或

  • 我有一个特定的nux发行版,例如只有busybox,因此没有其他选择,只能编译。

但是对于常见用途,例如在80%的情况下,不值得花时间编译,最好使用存储库版本。但是我通过编译学到了很多东西。


0

就个人而言,这是一个观点问题。如果你急着用,那就使用 apt-get,如果你有时间学习并且可能需要重新安装20次......那就编译它。

关于 PHP 编译的指南有很多,它有大量的配置标志,特别是针对 GD 和其他库的标志。如果只是为了学习和开发,个人认为最好获取 LAMP 或使用 apt-get...特别是如果你需要使用 Apache。


0

我认为编译的主要原因是获得最新版本二进制文件(稳定版或夜间版)。包管理器(大多数分发版)在这方面通常会令人讨厌地缓慢。

另一个原因是生产系统通常存在一个普遍问题,即不使用包管理器进行整体升级。即使这很容易。由于包管理器创建依赖链,您可能不想升级那些项目。因此,只需选择一项编译即可。它保持其他所有内容不变。当然,您必须始终研究升级问题并确保没有其他问题会出现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接