linux - Azure 应用服务 Linux PHP - 如何将 "--with-freetype-dir=/usr/lib/x86_64-linux-gnu"添加到 "./configure"?

标签 linux azure docker magento2 azure-web-app-service

我正在尝试在 Azure Linux 应用服务 (PHP 7.3-apache) 上安装 Magento,但遇到了这个 error :

Image CAPTCHA requires FT fonts support

显然是 libfreetype6-dev尽管已安装在底层容器中(位于 /usr/lib/x86_64-linux-gnu ),但 PHP 不会加载。

基本上,其他 StackOverflow 答案提出的解决方案是重新配置和重新编译 PHP。要重新配置,您必须运行 ./configure带有标志 --with-freetype-dir=/usr/lib/x86_64-linux-gnu 的命令。

根据info.php我需要运行的正确命令很可能是:

./configure 
--build=x86_64-linux-gnu  \
--with-config-file-path=/usr/local/etc/php  \
--with-config-file-scan-dir=/usr/local/etc/php/conf.d  \
--enable-option-checking=fatal  \
--with-mhash  \
--enable-ftp  \
--enable-mbstring  \
--enable-mysqlnd  \
--with-password-argon2  \
--with-sodium=shared  \
--with-pdo-sqlite=/usr  \
--with-sqlite3=/usr  \
--with-curl  \
--with-libedit  \
--with-openssl  \
--with-config-file-scan-dir=/usr/local/etc/php/conf.d  \
--with-zlib  \
--with-libdir=lib/x86_64-linux-gnu  \
--with-apxs2  \
--with-freetype-dir=/usr/lib/x86_64-linux-gnu \
--disable-cgi build_alias=x86_64-linux-gnu 

make && make install
service apache2 reload

不幸的是,我不确定如何在容器内执行此操作。我找到了blog这表明我应该使用 docker 工具来执行此操作。但我所能看到的只是如何更新 gd 扩展,这似乎不适用于我的情况:

docker-php-ext-configure gd –with-freetype-dir=/usr/lib/x86_64-linux-gnu”

容器还具有以下可能有帮助的命令:

docker-php-entrypoint     docker-php-ext-enable     docker-php-source
docker-php-ext-configure  docker-php-ext-install

关于如何实现这一目标有任何线索吗?

最佳答案

感谢Toan Nguyen post,我已经弄清楚了.

您不需要重新编译 php

libfreetype添加到您的GD配置中就足够了。不明显的是,由于容器仅保留 /home,因此您需要在门户中创建一个应用程序设置来覆盖所有以前的 PHP INI 配置。

以下是在 Azure 门户的 SSH Web 界面中运行所需的步骤:

  1. /home 目录中创建两个文件夹来保存扩展和自定义的 php INI 文件:

    mkdir /home/site/ext /home/site/ini
    
  2. 运行 docker 命令以使用 freetype 重新配置 GD 扩展(需要一些时间):

    docker-php-ext-configure gd --with-freetype-dir=/usr/lib/x86_64-linux-gnu && docker-php-ext-install -j$(nproc) gd
    

    它将返回生成您的分机的位置,如下所示:

    Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20180731/
    
  3. 将生成的扩展复制到此文件夹:

    cp /usr/local/lib/php/extensions/no-debug-non-zts-20180731/gd.so /home/site/ext
    
  4. 将所有 INI 文件移至新的 INI 文件夹。删除旧的 GD 引用并添加新的:

    cp /usr/local/etc/php/conf.d/* /home/site/ini
    rm -rf docker-php-ext-gd.ini
    echo “extension=/home/site/ext/gd.so” » extensions.ini
    
  5. 最后,更新 Azure 门户中的应用设置以包含新的 INI 文件夹。添加名称为 PHP_INI_SCAN_DIR 和值 /home/site/ini 的应用程序设置(这将覆盖以前的所有 INI 文件)。 enter image description here

  6. 这将重新启动您的应用程序。您可以使用 phpInfo() 来 确认 GD 扩展现在具有 freetype。 enter image description here

注意:如果您想重置配置,只需从应用程序设置中删除 PHP_INI_SCAN_DIR 值即可,这将使用默认配置重新启动容器。此外,您还可以从主站点删除 extini 进行清理,但它们无论如何都不会被加载。

关于linux - Azure 应用服务 Linux PHP - 如何将 "--with-freetype-dir=/usr/lib/x86_64-linux-gnu"添加到 "./configure"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60918752/

相关文章:

linux - 取shell中文件夹路径的最后一部分

linux - 使用脚本获取数据并显示一半

python - 如何使用新的 pandas DataFrame 更新 Azure ML 数据集以及如何在需要时恢复到特定版本

azure - 如何识别此 Pyspark 编码问题 - 输入时没有可行的替代方案

docker - 如何在 docker 中运行交互式 Centos 6

linux - 如何更改weblogic安装目录?

linux - 汇编子例程被调用两次,甚至没有从主程序中调用

node.js - VSTS部署成功后如何在azure应用程序服务上运行npm命令?

docker - 如何在声明式管道中将Jenkins构建参数作为参数传递给dockerfile

shell - 如果我们运行具有.sh文件的dockerfile,则 “docker build”和 “docker run”之间的区别