簡體   English   中英

Docker + PHP7 + GD 的問題導致“調用未定義的函數 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 -iphpinfo()中)但imagecreatefromjpeg不起作用,我不知道為什么。


我還運行了apt install libjpeg-dev libpng-dev libfreetype6-dev試圖 ~force~ 重新安裝(或重新配置),但似乎沒有成功(是的,我也重新啟動了容器)。

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/

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 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

更新版本 PHP 7.4 + Apache:

文件

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

...

添加這些命令

docker-php-ext-configure gd --with-freetype --with-jpeg 
docker-php-ext-install -j$(nproc) gd 

工作完整的 Dockerfile:

FROM php:7.4-fpm

# Copy composer.lock and composer.json
COPY composer.lock composer.json /src/

# Set working directory
WORKDIR /src

# Install dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    libpng-dev \
    libjpeg-dev \
    libwebp-dev \
    libxpm-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    zip \
    jpegoptim optipng pngquant gifsicle \
    vim \
    unzip \
    git \
    curl \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install pdo_mysql exif pcntl

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

RUN composer install --prefer-source --no-interaction

COPY . /src

RUN chmod 777 -R /src/storage

# Expose port 9000 and start php-fpm server
EXPOSE 9000

CMD ["php-fpm"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM