【问题标题】:What do docker-php-ext-configure, docker-php-ext-install and docker-php-ext-enable do?docker-php-ext-configure、docker-php-ext-install 和 docker-php-ext-enable 有什么作用?
【发布时间】:2018-12-26 13:30:28
【问题描述】:

我正在尝试使用 docker 设置 LAMP 网络服务器,我很高兴地发现 php 的好人已经将 a docker container for php 放在一起。

通读文档,我发现了三个表面上可以帮助我安装 php 扩展的函数;

  • docker-php-ext-configure
  • docker-php-ext-install
  • docker-php-ext-enable

作为一个 php 的新手,并且尝试过使用 apk addphp.ini hackery 的组合启用 php 模块但失败了(导致 .so not found 错误),我准备承认失败并做到这一点正确的方法。

不幸的是,文档对于这些命令的作用以及如何使用它们非常含糊:

我们提供辅助脚本 docker-php-ext-configure, docker-php-ext-install 和 docker-php-ext-enable 更容易 安装 PHP 扩展。

我尝试google it as well,但在网上也找不到任何有用的资源。

我现在完全混淆了安装、配置和安装 php 扩展的含义,以及像 apk add php7-* 这样的命令与所有这些的关系。

请解释这些函数的作用,以及如何使用它们来启用 php 扩展。

【问题讨论】:

    标签: php docker


    【解决方案1】:

    这些是帮助从源代码安装 php 扩展的帮助脚本

    • 并非所有扩展都在分发本机包管理器或 pecl 中可用
    • 即使这些存在,也可能希望以不同方式配置或优化

    谈谈脚本

    • docker-php-ext-configure - 在使用docker-php-ext-install 构建扩展之前配置它。它由docker-php-ext-install 执行,所以如果想要覆盖默认值,应该使用它
    • docker-php-ext-install - 从源代码构建扩展,通常执行docker-php-ext-configure 进行构建配置,毕竟通过执行docker-php-ext-enable 启用扩展(php.ini 条目)
    • docker-php-ext-enable - 通过向 php.ini 添加特定条目来启用已扩展。默认情况下,使用 pecl 或本机包管理器安装的扩展可能不会启用,因此需要这个额外的步骤。如上所述,使用docker-php-ext-install 安装的扩展会自动启用。

    【讨论】:

      【解决方案2】:

      这些函数可以帮助设置您的 PHP 配置,例如 您想将 opcache 添加到您的 PHP 配置中:

      首先你配置如下:

      docker-php-ext-configure gd \
          --enable-gd-native-ttf \
          --with-jpeg-dir=/usr/lib \
          --with-freetype-dir=/usr/include/freetype2 && \
          docker-php-ext-install gd \
      

      然后你安装你的配置

        && docker-php-ext-install opcache 
      

      然后你就可以启用它了

        && docker-php-ext-enable opcache
      

      【讨论】:

      • 谢谢。您能否解释一下为什么要在安装之前配置,这是否意味着我们也不需要apt install php-ocache
      • 在 PHP 中,如果你想在 PHP 中使用 LibJPEG 启用 GD 库,你需要配置它以启用 gd 库,第二个如果你需要实现 opcache,它取决于你的操作系统你使用的 docker 容器。
      • 但绝对你需要做 apt install php-ocache 来将它安装到你的容器中。
      • 所以为了使用opcache php 扩展,我需要apt-get install php-opcache,然后是docker-php-ext-configure,然后是docker-php-ext-install,然后是docker-php-ext-enable
      • 另外,当我有docker-php-ext-install 时,我为什么要使用apt-get install?有什么区别?
      【解决方案3】:

      我有同样的问题,对其他答案的详细程度不满意。

      docker-php-ext-install 和其他实用程序的代码位于 PHP docker 映像中。一些例子:

      php7.3-fpm 中的docker-php-ext-install 有这些有趣的部分(省略选项解析等):

      docker-php-source extract
      cd /usr/src/php/ext
      
      # skip usage, option parsing and checking the extension list
      
      for ext in $exts; do
          cd "$ext"
          [ -e Makefile ] || docker-php-ext-configure "$ext"
          make -j"$j"
          make -j"$j" install
          find modules \
              -maxdepth 1 \
              -name '*.so' \
              -exec basename '{}' ';' \
                  | xargs -r docker-php-ext-enable ${iniName:+--ini-name "$iniName"}
          make -j"$j" clean
          cd "$popDir"
      done
      

      所以这意味着我在各处看到的-j$(nproc) 指定同时运行的make 作业(命令)的数量与处理器的数量相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-20
        • 2017-07-09
        • 1970-01-01
        • 2020-11-02
        • 1970-01-01
        • 1970-01-01
        • 2020-05-09
        • 1970-01-01
        相关资源
        最近更新 更多