【问题标题】:Compile PHP on Linux or use apt-get / yum?在 Linux 上编译 PHP 还是使用 apt-get / yum?
【发布时间】:2012-03-03 04:45:27
【问题描述】:

多年来,我一直在使用我想要的配置选项编译 PHP。我从源代码编译我使用的扩展。与从 apt-get 或 yum 等包管理器安装它相比,这样做是否有优势。我认为它也会给我一个更精简的二进制文件。我注意到它们是存储库中的 PHP 模块,例如“php53-gd”。如果我想要的东西(例如 PHP 的 cURL)没有可用的包怎么办?

我了解编译的缺点,例如需要根据我的配置选项下载/安装依赖项。我真的不关心这个。

所以问题是:

在 Linux 上编译 PHP 还是只使用 apt-get / yum?我可以从回购中得到我需要的所有东西吗?有没有人仍然从源代码编译它?

感谢任何见解!谢谢。

【问题讨论】:

    标签: php linux


    【解决方案1】:

    我每次都从源代码编译。关于手动编译的上述问题并不难解决。例如,我的./configure 设置保存到版本控制的文件中,所以当新版本的 PHP 稳定并且我准备进行切换时,我下载并解压缩文件,然后运行以下命令:

    ./configure `sh /path/to/my/configure/php.sh`
    

    难度不大。而且因为它在版本控制中,所以我可以添加关于为什么添加或删除模块的注释。

    手动编译的另一个好处是它可以让我尽可能减少 PHP 占用空间。我通过--disable-all 标志,然后添加我需要的模块。但是,这种极简方法有一个缺点,最近我需要安装 Magento,所以我不得不使用 --enable-hash--with-mcyrpt 标志重新编译。尽管我需要添加新的标志,但添加到配置文件并重新编译并不难。

    【讨论】:

    • 我喜欢版本控制配置参数的想法。因为当你搬到一台新机器上时,你是否也维护了一个需要安装的软件包列表?
    • 不,但是 PHP 在我的开发服务器上编译的方式与在生产服务器上的编译方式相同,因此只需要一个配置文件。你要做的最后一件事是开发代码,一切都通过了 QA,然后推送到生产中,只是发现模块不可用。
    【解决方案2】:

    从源代码编译有一些怪癖:

    1. 有数百个配置参数和标志。而且您可能不知道需要使用的最佳选项。
    2. 如果您依赖 apt-get 的 PHP,那么您可以放心,如果您在服务器上设置了自动升级,您将获得最新的补丁和安全更新。
    3. php.ini 的配置变化很大。有时您的操作系统可能会为您决定一些默认值,这些默认值可能会更好地与系统的其余部分配合使用。
    4. 使用 apt 安装扩展程序(如 xdebug 或其他软件包)要容易得多。

    但是,如果您想学习,从头开始编译 php 是值得的。此外,如果您不使用其中的某些部分,您可以随时在配置中禁用它们 - 但同样可能不会对性能产生太大影响。

    【讨论】:

    • 我多年来一直在编译它。保持最新状态对我来说并不难。我定期从源头安装扩展。我不太愿意使用 apt-get,但考虑过尝试一下。
    • @MatthewScragg,抱歉,我没有正确阅读您的问题。我把你误认为以前没有编译过 PHP 的人。如果到目前为止它对你有用,我看不出你有任何改变它的理由:)
    【解决方案3】:

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

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

    和/或

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

    和/或

    • 需要特定应用程序

    和/或

    • 需要优化性能:在使用它的机器上编译时,如果使用编译选项为您的系统获得真正调整的版本,这可以提高一些性能,

    和/或

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

    和/或

    • 我有一个特定的 nux 发行版,比如只有一个 busybox,所以除了编译没有其他选择。

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

    【讨论】:

      【解决方案4】:

      就个人而言,这是一个见仁见智的问题。如果你赶时间,apt-get它,如果你有时间学习并且可能需要重新安装20次......编译它。

      有大量的 PHP 编译指南。它有大量的配置标志,特别是对于 GD 和其他库。个人而言,如果这是为了学习和开发,只需获取 LAMP 或使用 apt-get ......尤其是如果您需要使用 Apache 时

      【讨论】:

        【解决方案5】:

        我觉得编译的主要原因是拥有最新版本的二进制文件(稳定版或夜间版)。包管理器(大多数扭曲者)在这方面通常非常缓慢。

        另一个原因是生产系统没有使用包管理器进行大规模升级是非常普遍的问题。即使这很容易。由于包管理器创建依赖链,您可能不想升级这些项目。因此,仅选择一项,编译是一种选择。它使其他一切保持原样。您当然必须始终研究升级问题,并确保没有其他问题会失败。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-30
          • 2012-03-21
          • 2013-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-13
          相关资源
          最近更新 更多