モチベ
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 Support
とFreeType 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が有効になっているのが確認できる。
ですが、上記のように php_info()
だといらっしゃいません...?
elfinderも正常に動きませんでした。
無事elfinderも正常に動き、jpegをリサイズすることができました!!
参考資料