Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What is going on with this article?
@wallkickers

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

More than 1 year has passed since last update.

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

5
Help us understand the problem. What is going on with this article?
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
wallkickers
学んだことを形にするのが好きなWebエンジニアです。前職は広告を売ったり、企業の情報発信をお手伝いしたりしていました。「あったら便利だな」をプログラミングで作っています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
5
Help us understand the problem. What is going on with this article?