状況
LaravelでファイルのUnitTestを作成しました。
↓のようにファイルのダミーを用意して、保存されているかを確認。
$file = UploadedFile::fake()->image('sample.jpg', '100', '100');
$ vendor/bin/phpunit {ファイルのパス}
でテストを実行したら、
$file
の行で下のエラーが、、
Error: Call to undefined function Illuminate\Http\Testing\imagecreatetruecolor().
エラーの内容
直訳すると
エラー: 未定義の関数 Illuminate\Http\Testing\imagecreatetruecolor() の呼び出し
未定義の関数を呼び出しているらしい、、、(そんなの呼んだつもりないのに)
原因
imagecreatetruecolor()メソッドを使うには、
PHPのGDライブラリをインストールする必要があります
Dockerfileにインストールのコマンドを記述していなかったことが原因のようです
対応
PHPのGDライブラリをインストールします
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd
3つのライブラリを追加
RUN apt-get install
の後ろに↓の3行を追加
RUN apt-get update \
&& apt-get install -y \
libfreetype6-dev \ #①フォント描画のためのライブラリ
libjpeg62-turbo-dev \ #②JPEGを有効化するためのライブラリ
libpng-dev \ #③PNGを有効化するためのライブラリ
改行なしバージョン
RUN apt-get update \
&& apt-get install libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
この3つを入れることでGDライブラリが使えるようになる
- libfreetype6-dev フォント描画のためのライブラリ
- libjpeg62-turbo-dev JPEGを有効化するためのライブラリ
- libpng-dev PNGを有効化するためのライブラリ
docker-php-ext-configure で解凍
以下の1行を追加
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
- libfreetype6-dev フォント描画のためのライブラリ
- libjpeg62-turbo-dev JPEGを有効化するためのライブラリ
この2つのライブラリは事前に圧縮されているものらしい
docker-php-ext-configure
で解凍することによって使うことができる。
(Dockerコマンドってたくさんあるんですね、、その都度調べないとですね)
実行コマンド
最後にこちらの実行コマンドを追加
&& docker-php-ext-install -j$(nproc) gd \
stap1でもインストールしましたが、こちらでDockerへのインストールが完了。
イメージは、
step1でパッケージを取ってきて
step2で解凍して
step3でインストールする
という感じです。