こんにちは!
現在、docker & Laravelでシステム開発を行なっています。
システム内に「データからグラフを作成してpdf出力する」という機能があり、必要なパッケージをインストールしようとしたところ、「requires ext-gd * -> the requested PHP extension gd is missing from your system.」と表示されてしまいインストールできなかったので、解決するまでを書きたいと思います。
開発環境
・docker
- amazonlinux:2[nginx/php]
- Mysql
やりたいこと
PHPの拡張モジュール「gd」を有効にしたい!
解決策
yum install php-gd.x86_64
を実行して必要なパッケージをインストール!
やったこと
1: [composer require amenadiel/jpgraph]を実行。失敗。
2: gdが読み込まれていないことを確認。
3: [yum install php-gd.x86_64]を実行。
4: 無事にインストール完了。
1: composer require amenadiel/jpgraph
を実行。失敗。
「データからグラフを作成してPDFで表示」という機能があり、実装のために「amenadiel/jpgraph」をインストールする必要がありました。そこで composer require amenadiel/jpgraph
を実行したところ、下記のメッセージが表示されました。
Using version ^4.0 for amenadiel/jpgraph
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for amenadiel/jpgraph ^4.0 -> satisfiable by amenadiel/jpgraph[4.0.0].
- amenadiel/jpgraph 4.0.0 requires ext-gd * -> the requested PHP extension gd is missing from your system.
To enable extensions, verify that they are enabled in your .ini files:
-
- /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini
- /usr/local/etc/php/conf.d/docker-php-ext-pdo_pgsql.ini
- /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
Installation failed, deleting ./composer.json.
[google翻訳(一部抜粋)]
-amenadiel / jpgraph 4.0.0にはext-gdが必要です*->要求されたPHP拡張gdがシステムにありません。
ext-gdが必要らしいです。
調べてみると「ext-gd」とはPHPの拡張モジュール「GD」のこと。GDはPHPでGIFとかJPEGなどを作成するために必要なモジュールみたいです。
参考:画像処理 (GD)/はじめに
https://www.php.net/manual/ja/intro.image.php
2: gdが読み込まれていないことを確認
php -m
で読み込んでいるモジュールの確認ができます。
実行したところ、gdという単語が見当たりませんでした。どうやらgdライブラリをインストールする必要があるようです。
3:yum install php-gd.x86_64
を実行。
yum list
でyumを使ってインストール可能なパッケージの一覧を表示することができます。
gdに関するものを表示するために yum list | grep gd
を実行。表示された一覧から関係がありそうな php-gd.x86_64
をインストールするため yum install php-gd.x86_64
を実行しました。
4:無事にインストール完了。
該当コンテナを再起動して、再度 php -m
を実行すると「gd」が読み込めていました。
最後に composer require amenadiel/jpgraph
を実行。無事にインストールが完了しました。
つまづいた点
・ext-gdって何?
・拡張機能はどこから読み込んでいるの?
・php.ini のコメントを外しても有効にならないんだけど?
ext-gdって何?
「gd」という拡張機能のことです。
ext-gdが必要です*->要求されたPHP拡張gdがシステムにありません。
というエラーメッセージから「php ext-gd」で検索して、**「extはextensionか〜!グラフを画像にするためにイメージ作成のための拡張機能が必要なんだね!」**と理解して進めることができました。
拡張機能はどこから読み込んでいるの?
拡張機能のライブラリは、php.ini内の[extension_dir={Path}]に書いてあります。
僕の場合は extension_dir => /usr/lib64/php/modules => /usr/lib64/php/modules
となっており、中には拡張子が「~.so」のファイルがありました。php -m
で表示されるモジュールはこのディレクトリのファイルから読み込んでいるのだと思います。
php.ini のコメントを外すだけで有効にはならない。
PHPの拡張機能を追加するために色々検索したのですが、最初に見つけたのが「php.ini」のコメントアウトを外すという記事。そこで、php --ini
を実行してphp.iniファイルのあるディレクトリを探し、「extension=gd」のコメントアウトを外しました。しかし、「gdは使えないよ!」というメッセージが表示されたことから、そもそもgd自体入っていないから、コメントアウトを外しても意味がなかったのだと思います。