Docker + PHP7 + GD 的问题导致 "Call to undefined function imagecreatefromjpeg()"
Troubles with Docker + PHP7 + GD resulting in "Call to undefined function imagecreatefromjpeg()"
我在尝试使用 imagecreatefromjpeg
使用此 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-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 -i
和 phpinfo()
中)但 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/
为PHP5.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
PHP 7.4(高山)
如果有人正在努力使用 PHP 7.4 在 GD 中启用 JPEG 支持,这就是我必须做的才能使用 imagecreatefromjpeg()
功能。
我的示例基于 Alpine 3.10,如果您使用其他发行版,请根据您的需要进行调整。
首先安装依赖项,在我的例子中,除了 JPEG,我还需要支持 PNG 文件。
apk add jpeg-dev libpng-dev
之后我们可以使用 运行 docker-php-ext-configure
命令来配置我们的 gd 支持 JPEG。请注意,标志 --with-jpeg-dir
已更改为 --with-jpeg
并且我们不需要提供标志来启用 PNG。您可以在 GD 部分的 PHP 7.4 Changelog 中阅读更多内容。
docker-php-ext-configure gd --with-jpeg
直接让我们运行docker-php-ext-install
安装GD本身。
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
更新版本 PHP 7.4 + Apache:
Docker 文件
FROM php:7.4-apache
RUN apt-get update -y && apt-get install -y sendmail libpng-dev libfreetype6-dev libjpeg62-turbo-dev libgd-dev libpng-dev
RUN docker-php-ext-install pdo pdo_mysql
RUN docker-php-ext-configure gd \
--with-freetype=/usr/include/ \
--with-jpeg=/usr/include/
RUN docker-php-ext-install gd
...
我在尝试使用 imagecreatefromjpeg
使用此 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-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 -i
和 phpinfo()
中)但 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/
为PHP5.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
PHP 7.4(高山)
如果有人正在努力使用 PHP 7.4 在 GD 中启用 JPEG 支持,这就是我必须做的才能使用 imagecreatefromjpeg()
功能。
我的示例基于 Alpine 3.10,如果您使用其他发行版,请根据您的需要进行调整。
首先安装依赖项,在我的例子中,除了 JPEG,我还需要支持 PNG 文件。
apk add jpeg-dev libpng-dev
之后我们可以使用 运行 docker-php-ext-configure
命令来配置我们的 gd 支持 JPEG。请注意,标志 --with-jpeg-dir
已更改为 --with-jpeg
并且我们不需要提供标志来启用 PNG。您可以在 GD 部分的 PHP 7.4 Changelog 中阅读更多内容。
docker-php-ext-configure gd --with-jpeg
直接让我们运行docker-php-ext-install
安装GD本身。
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
更新版本 PHP 7.4 + Apache:
Docker 文件
FROM php:7.4-apache
RUN apt-get update -y && apt-get install -y sendmail libpng-dev libfreetype6-dev libjpeg62-turbo-dev libgd-dev libpng-dev
RUN docker-php-ext-install pdo pdo_mysql
RUN docker-php-ext-configure gd \
--with-freetype=/usr/include/ \
--with-jpeg=/usr/include/
RUN docker-php-ext-install gd
...