Help us understand the problem. What is going on with this article?

【PHP】「〜requires ext-gd * -> the requested PHP extension gd is missing from your system.」でパッケージがインストールできない時の解決法。

こんにちは!
現在、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自体入っていないから、コメントアウトを外しても意味がなかったのだと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした