docker-php-ext-configure,docker-php-ext-install和docker-php-ext-enable有什么作用?

时间:2018-12-26 13:30:29

标签: php docker

我正在尝试使用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黑客技术(导致.so not found错误)来启用php模块,我已经准备好了承认失败并采取正确的方法。

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

  

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

我尝试google it as well,但也无法在线找到任何有用的资源。

我现在完全困惑安装,配置和安装php扩展的含义以及诸如apk add php7-*之类的命令与所有这些之间的联系。

请说明这些功能的作用,以及如何使用它们启用 php扩展名。

3 个答案:

答案 0 :(得分:4)

这些是帮助程序脚本,可以帮助您从源代码安装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所安装的扩展名将自动启用。

答案 1 :(得分:1)

如果通过示例,这些功能可以帮助您设置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

答案 2 :(得分:0)

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

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

docker-php-ext-install中的

php7.3-fpm具有以下有趣的部分(省略了选项解析等):

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作业(命令)的数量与处理器的数量相同。