AWS Docker Laravel

【Docker + PHP(Laravel) + S3】Illuminate\Http\Testing\imagecreatetruecolor()の解決方法

状況

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でインストールする

という感じです。

-AWS, Docker, Laravel