Docker + PHP7 + GD 导致“调用未定义的函数 imagecreatefromjpeg()”的问题

2022-08-30 11:13:42

我在尝试使用此功能生成容器创建映像时遇到问题:imagecreatefromjpegDockerfile

FROM  php:7.1-apache

RUN apt-get update && \
    apt-get install -y -qq git \
        libjpeg62-turbo-dev \
        apt-transport-https \
        libfreetype6-dev \
        libmcrypt-dev \
        libpng12-dev \
        libssl-dev \
        zip unzip \
        nodejs \
        npm \
        wget \
        vim

RUN pecl install redis && docker-php-ext-enable redis
RUN docker-php-ext-install -j$(nproc) iconv mcrypt zip pdo pdo_mysql gd bcmath

COPY ./containers/yii.conf /etc/apache2/sites-available/000-default.conf

RUN for mod in rewrite headers; do a2enmod $mod; done && service apache2 restart

WORKDIR /var/www/html/

GD已正确安装(libjpeg也 - 都出现在和中),但不起作用,我不知道为什么。php -iphpinfo()imagecreatefromjpeg


我也运行了~强制〜重新安装(或重新配置),但似乎没有成功(是的,我也重新启动容器)。apt install libjpeg-dev libpng-dev libfreetype6-dev

root@e8db647c96c4:/var/www/html# php -i | grep -i GD
/usr/local/etc/php/conf.d/docker-php-ext-gd.ini,
gd
GD Support => enabled
GD Version => bundled (2.1.0 compatible)
gd.jpeg_ignore_warning => 1 => 1
root@e8db647c96c4:/var/www/html# 

root@e8db647c96c4:/var/www/html# docker-php-ext-enable gd

warning: gd (gd.so) is already loaded!

root@e8db647c96c4:/var/www/html# 

我已经尝试过,显然它不能解决问题。apt install libgd2-xpm-dev*


解决

我错过了把

RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
RUN docker-php-ext-install -j$(nproc) gd

进入我的 Dockerfile。


完全修订的 Dockerfile:

FROM  php:7.1-apache

RUN apt-get update && \
    apt-get install -y -qq git \
        libjpeg62-turbo-dev \
        apt-transport-https \
        libfreetype6-dev \
        libmcrypt-dev \
        libpng12-dev \
        libssl-dev \
        zip unzip \
        nodejs \
        npm \
        wget \
        vim

RUN pecl install redis && docker-php-ext-enable redis
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
RUN docker-php-ext-install -j$(nproc) iconv mcrypt zip pdo pdo_mysql gd bcmath

COPY ./containers/yii.conf /etc/apache2/sites-available/000-default.conf

RUN for mod in rewrite headers; do a2enmod $mod; done && service apache2 restart

WORKDIR /var/www/html/

答案 1

7.4 菲律宾比索 (阿尔卑斯)

如果有人正在努力在GD中启用PHP 7.4中的JPEG支持,那么为了能够使用函数,我必须这样做。我的例子是基于Alpine 3.10的,如果你使用其他发行版,请根据你的需求进行调整。imagecreatefromjpeg()

首先安装依赖项,在我的情况下,在JPEG旁边,我需要对PNG文件的支持。

apk add jpeg-dev libpng-dev

之后,我们可以运行命令来配置具有JPEG支持的gd。请注意,标志已更改为,我们不需要提供标志来启用 PNG。您可以在PHP 7.4 GD部分的更改日志中阅读更多内容。docker-php-ext-configure--with-jpeg-dir--with-jpeg

docker-php-ext-configure gd --with-jpeg

紧接着,让我们运行以安装GD本身。docker-php-ext-install

docker-php-ext-install -j$(nproc) gd

完整示例

FROM php:7.4-fpm-alpine3.10

RUN apk add jpeg-dev libpng-dev \
    && docker-php-ext-configure gd --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd

答案 2

对于 PHP 5.6

FROM php:5.6-apache

RUN apt-get update && apt-get install -y \ 
libfreetype6-dev libjpeg62-turbo-dev \ 
libgd-dev libpng12-dev
RUN docker-php-ext-configure gd \ 
--with-freetype-dir=/usr/include/ \ 
--with-jpeg-dir=/usr/include/
RUN docker-php-ext-install gd

如果仍然不工作,可以重新安装容器。

docker rm <container id> 
docker-compose build --pull
docker-compose up

推荐