5
1

More than 3 years have passed since last update.

php:7.3-fpm-alpineで、モジュールのインストール

Posted at

phpのモジュールのインストール

composerを実行したときに、socketsがないとのエラーが発生しました。
エラー解決の道のりで学んだことを共有します。

筆者の使用している環境

・docker
・php:7.3-fpm-alpine

error内容

composer require linecorp/line-bot-sdk 

のコマンド実行時にエラーが発生しました。

/work # composer require linecorp/line-bot-sdk
    1/3:        https://packagist.jp/p/provider-2020-04$0debce5054869c0cc3060fd8316edffa3035f0642bf192c9e9cf9724d7429a24.json
    2/3:        https://packagist.jp/p/provider-latest$a6fa0af3f924c039609f8f1f06ac662b10318aa68e1148be6b1bdb31361c8133.json
    3/3:        https://packagist.jp/p/provider-2020-01$6b3554006599af21a07eabf22d05e92f989cac78cda0223195aeebb83d53c317.json
    Finished: success: 3, skipped: 0, failure: 0, total: 3
Using version ^4.3 for linecorp/line-bot-sdk
./composer.json has been updated
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 linecorp/line-bot-sdk ^4.3 -> satisfiable by linecorp/line-bot-sdk[4.3.0].
    - linecorp/line-bot-sdk 4.3.0 requires ext-sockets * -> the requested PHP extension sockets is missing from your system.

  To enable extensions, verify that they are enabled in your .ini files:
    - /usr/local/etc/php/php.ini
    - /usr/local/etc/php/conf.d/docker-php-ext-bcmath.ini
    - /usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.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.

結果的にはこのエラー文が原因でした↓
- linecorp/line-bot-sdk 4.3.0 requires ext-sockets * -> the requested PHP extension sockets is missing from your system.

socketsがないですよ。という意味らしいです。

解決方法1

https://qiita.com/hamatti/items/d164bd4a88fc51f2a99d
上記の記事のように、多くの記事でphp.iniでのコメントを外せばよいとの意見が多かったです。
ですが、これでは解決しませんでした。

上記のようにコメントを外して解決する場合は、あらかじめsocketsのモジュールがインストールされている場合なのだと思う。

私が使っている環境はalpineの環境なので、あらかじめインストールされていなかったのです。

php -m

上記のコマンドをターミナル上で打つことで、インストールされているモジュールを確認することができます。

解決方法2

apk add php7-sockets

このコマンドでsocketsをインストールして解決かと思ったが変化なしでした。この辺はよくわかっていません。

githubのdocker-libraryからダウンロードすることで、解決できました。

dockerfileにて、

RUN docker-php-ext-install sockets

で無事socketsをインストールでき、解決しました。

phpのモジュールについて

エラー解決で調べていく中で、socketsはphpのモジュールだということを知りました。
モジュールってなんだ?と思い調べました。

モジュールはphpの拡張機能のことです。
dockerの場合、上記のようにdockerfile内でRUN docker-php-ext-install (インストールしたいモジュール) というコマンドを記述することでインストールすることができます。

モジュールについて、下記に公式のドキュメントを張っておきます。
https://www.php.net/manual/ja/install.pecl.php

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1