久方ぶりにEC-CUBEの作業があり、ローカル環境(xampp)にEC-CUBE4.3をインストールしました。
ところが、見慣れないモジュールエラーが発生しました。
大半のモジュールエラーは、php.iniの拡張モジュールオプションを有効化すればいいのですが、今回はそれだけでは改善しませんでした。
少々手間取ったので、忘備録として記録いたします。
今回のxamppの環境
今回の検証には以下のxamppを使用しています。
php8.2が使えるバージョンです。
- xampp windows版の8.2.12
現象はこのような感じです
sodium拡張モジュールとは
エラーが出たときにとりあえずググるのですが、今回の「sodiumモジュールエラー」は、無視してもそれなりにインストールできますというような記事がでてきました。
確かにsodium拡張モジュールエラーを無視してもEC-CUBEのインストールはできました。
ただ、気になるのでsodium拡張モジュールとは何なのか調べてみました。
sodium拡張モジュールは一言でいうと、「暗号化モジュール」でした。
暗号化キーを生成したり、文字列のエンコード・デコードなどを行う機能がありました。
要はセキュリティに関するサブルーチンライブラリです。
EC-CUBE本体には使われていないようですが、EC-CUBEのプラグインに使われていることがあります。
そのため、sodium拡張モジュールが未実装だとプラグインが正常動作しないケースがあります。
なんとなくですが、決済関係のプラグインで使われていそうです。
確かにカード決済プラグインならば、セキュリティは必須な感じがします。
いつものごとくphp.iniのオプションを設定しました
phpのモジュールが未実装の場合は、php.iniのコメント化されているモジュールを有効化すればたいてい解決します。事実、xamppのphp.iniにはsodiumのモジュールが内蔵されていました。
xamppを再起動してやってみたところモジュールエラーは改善せず
楽勝と思いつつ、xamppを再起動してEC-CUBE4.3のインストールをやってみたところ、sodiumモジュールエラーは消えませんでした。
なぜ?
と思いましたが、実は落とし穴がありました。
sodiumモジュールはhttpd-xampp.conf にも追記か記述が必要
php.iniを直しただけでは改善しなかった原因をぐぐって調べたところ、次のことをしなければいけないことがわかりました。
- sodiumモジュールは、libsodium.dllを読み込みしないと動かない
phpのモジュール本体は、大抵のものは初めから読み込みされています。
なので、php.iniの拡張モジュールを有効にするだけで動作します。
ですがsodiumモジュールは、dllファイルをそもそも読み込んでいないので、自分で読み込みの記述を入れてやる必要があります。
sodiumモジュールの読み込みを記述する方法
モジュール読み込みは、httpd-xampp.confファイルに記述します。
xampp専用のconfファイルですが、http.confの拡張設定です。
要はxamppの都合上必要な設定を記述する設定ファイルです。
以下のようにlibsodium.dllの記述を追加すればOKです。
dllファイルのパスは、xamppのインストールされたドライブ、フォルダにより変わりますが、他のdllファイルとパスを合わせておけば大丈夫です。
libsodium.dllを読み込むようにしたらエラーが出なくなりました
httpd-xampp.confファイルにlibsodium.dllの読み込み記述をいれ、xamppを再起動したらec-cube4.3のsodium拡張モジュールエラーは出なくなりました。
sodiumエラーは無視してもインストールはできますが、後々不具合が出るかもしれないことを考えると、最初に対処しておくほうが無難です。