5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker内でGD使いたい ~elfinderが動くまで~

Last updated at Posted at 2021-05-20

モチベ

ckeditorで画像をアップロードしたいので、elfinderを使いたい、というのが始まりでした。
画像のリサイズもelfinderのプラグインautoResizeでやっちゃいたい!

elfinder上でjpegの画像をアップロードすると...

Fatal error: Call to undefined function imagecreatefromjpeg()

なんかおかしい。

原因

GDによるjpegの操作がうまくいってないっぽい。

GDとは?

イメージ処理に関する関数が含まれているライブラリです。
これを使うことでPHPが画像処理ができるようになります。

0.状況の確認

php -r 'print_r(gd_info());'

-rコマンドは

  -r <code>        Run PHP <code> without using script tags <?..?>

とのことなので、 ?>コマンドいらずでphpコードを実行できます。
gd_info()はGDに関する諸々のconfigをチェックできます。
以下実行結果

(
    [GD Version] => bundled (2.1.0 compatible)
    [FreeType Support] => 
    [FreeType Linkage] => with freetype
    [GIF Read Support] => 1
    [GIF Create Support] => 1
    [JPEG Support] => 
    [PNG Support] => 1
    [WBMP Support] => 1
    [XPM Support] => 
    [XBM Support] => 1
    [WebP Support] => 
    [BMP Support] => 1
    [TGA Read Support] => 1
    [JIS-mapped Japanese Font Support] => 
)

JPEG SupportFreeType SupportがOKになってない!!

1.必要なパッケージを落とす

こちらのサイトがめっちゃ参考になりました。

今回はpng,jpeg,freetypeを使えるようにしたかったので

  • zlib
  • libjpeg62-turbo-dev
  • libfreetype6-dev

などが必要でした。

docker内部でインストールする場合は、

apt-get install zlib libjpeg62-turbo-dev libfreetype6-dev

Dockerfileに書き込むももよし。

2.docker-php-* コマンドで諸々指定(全てを指定すること)

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

docker-php-ext-configureとは?
php extensionというphp拡張用モジュールの諸々の設定を変更できるコマンドらしいです。
これでgdのfreetypeとjpegを有効にします。

まだ設定ファイルを変更しただけなので、gdをインストールし直します。

docker-php-ext-install gd

docker Hubのサンプルには -j$(nproc)がついていますが、
これについては参考サイトを読んで、さらっと流しておきました。
速度の計測なども今後行いたいですね。

$(nproc) というのは nproc コマンドの結果で、CPU 数になります。

再度 php -r 'print_r(gd_info());' を走らせると、

(
    [GD Version] => bundled (2.1.0 compatible)
    [FreeType Support] => 1
    [FreeType Linkage] => with freetype
    [GIF Read Support] => 1
    [GIF Create Support] => 1
    [JPEG Support] => 1
    [PNG Support] => 1
    [WBMP Support] => 1
    [XPM Support] => 
    [XBM Support] => 1
    [WebP Support] => 
    [BMP Support] => 1
    [TGA Read Support] => 1
    [JIS-mapped Japanese Font Support] => 
)

JPEGとFreeTypeが有効になっているのが確認できる。

スクリーンショット 2021-05-20 16.03.20.png

ですが、上記のように php_info()だといらっしゃいません...?
elfinderも正常に動きませんでした。

dockerをrestartすると復活🎉
スクリーンショット 2021-05-20 16.28.56.png

無事elfinderも正常に動き、jpegをリサイズすることができました!!

参考資料

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?