2022/08/10
前回、EC-CUBEを Docker で構築した話をエントリーしました。
【 無料 Dockerfile あり 】EC-CUBE2 を Docker で構築してみた
最初のほうはエラーが出てハマっていたんですよね(苦笑)
原因は PHP 拡張モジュールである「mysqli」がなかったからでした。
今回は Docker における PHP 拡張モジュールの追加の仕方についてエントリーします。
INDEX
背景(EC-CUBE2が使えない?)
EC-CUBE2 の設定で、DB と接続する箇所があるのですが、そこで以下のようなエラーが表示されていました。
エラー内容を読むと、PHP 拡張モジュール「mysqli」がないと書いてあります。
PHP から MySQL データベースを操作する時のインターフェースを提供するためのインターフェースを提供する、PHP の拡張機能です。
### mysqliのコード例
# DBサーバーへ接続
$db_link = mysqli_connect( 'host_name', 'user_name', 'password');
# DBへ接続
mysqli_select_db( $db_link, 'database_name');
# クエリの実行
$data = mysqli_query( $db_link, 'SELECT * FROM test_table');
# DBとの接続解除
mysqli_close($db_link);
mysqli は、PHP5.5 以降で非推奨、7.0 で削除となったので、これが原因だったんですね。
しかし
「拡張モジュール?」
「mysqliってDockerにどうやって追加するの?」
よくわからなかったので、結構ハマってしまいました。。
PHP拡張モジュールとは
PHP インタプリターは C 言語で記述されています。
Laravel フレームワークと同様に小さなソースファイルに分割されています。
このソースファイルをコンパイルしてオブジェクトファイルに変換します。
このときに機能語とにまとめてモジュール化し保存します。
各モジュールは「基本機能」と「拡張機能」に分けて作られています。
PHP は基本機能だけでもたくさんのモジュールを含んでいますが、利用頻度が低いものは組み込まずに後から追加できるような構成となっています。
この追加可能なモジュールのことを拡張モジュールと呼んでいます。
なお、以下のコマンドラインで現在利用可能な拡張モジュールが確認できます。
$ php -m
Docker に PHP 拡張モジュールを追加する手順
1)Dockerfile に mysqli を追加
以下のように docker-php-ext-install の引数に mysqli を追加します。
:
# ミドルウェアのインストール
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
libpng-dev \
libpq-dev \
&& docker-php-ext-install pdo_mysql mysqli
:
PHP に標準で備わっている拡張パッケージのインストール & 有効化ができる。
## PHP拡張モジュールのGD(画像変換モジュール)をインストール場合
&& docker-php-ext-install pdo_mysql gd
ちなみに pecl(ピクル) は PHP に標準で備わっていないパッケージをインストールすることができる。
RUN pecl install redis \
&& docker-php-ext-enable redis
2)php.ini に拡張モジュール(mysqli)を追記
Dockerfile にて /usr/local/etc/php/ へ ADD している php.ini に PHP 拡張モジュールを追記します。
:
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
extension=mysqli
3)Dockerfileのイメージを再構築
Dockerfile で ADD している php.ini を修正したので、もう一度イメージを再構築する必要があります。
以下のコマンドでビルドと起動の両方をやってくれます。
$ docker-compose up -d –-build
4)mysqli がインストールされたか確認
## コンテナに入る
$ docker-compose exec app bash
## 確認
$ php -r "phpinfo();" | grep mysqli
grepコマンドの使い方については以下をご参照ください。
以上です。
Udemyを使ったLaravel学習方法
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。