このブログは Alibaba Cloud の Elstic Compute Service の Linux インスタンス上に WordPress をインストールし環境を構築しています。 ここ数日この環境の最新化(OS や MySQL など)を進めており今回は PHP の話です。 次回のバージョンアップ時に同じことで困らないよう作業記録を残します。
また、”mysqli php 拡張機能がインストールされ、有効になっていることを確認してください。”の検索キーワードでこの記事にたどりつく人が多いようなので一番最初にその話を追加し、そこだけ読めばわかるようにしました。
目次
解決方法:mysqli php 拡張機能がインストールされ、有効になっていることを確認してください
PHPのバージョンアップや設定変更後、場合によってはLinux全体のパッケージの更新を行った後に WordPress が正常に動作しない時があります。 その時、Wordpressの管理画面にアクセスすると“mysqli php 拡張機能がインストールされ、有効になっていることを確認してください”と表示されます(英語だと“Please check that the mysqli PHP extension is installed and enabled.”)
解決方法は、Wordpress が求めている拡張機能をインストールし、有効にすることです。 拡張機能がインストールされていない場合やインストールしていても有効化していないとこのメッセージが表示されます。
確認方法と解決方法は以下の通りです。
(1) MySQL 拡張機能がインストールされていることを確認する
OSにログインし、shell (Bashとか)でコマンドを実行します。
$ sudo php8.4 -m | grep mysqli
mysqli
→ コマンドを実行し"mysqli"が表示されればOK
→ 表示されていないは以下のコマンドでインストールする(Ubuntuの場合)
$ apt install php-mysqli(2) php.ini でMySQL拡張機能(mysqli)が有効化されていることを確認する
有効な場合は以下の行が存在(コメントアウトされている)
extension=mysqli
有効になっていない場合はコメントアウトする
;extension=mysqli
↓
extension=mysqli(3) Webサーバを再起動する
以下はApacheの場合ですが、サービスを再起動します。
$ sudo systemctl restart apache2注意事項
複数のphp をインストールしている場合、Webサーバでどのphpバージョンを理由しているか確認し、Webサーバで利用しているphpバージョンで拡張機能をインストールする必要があります。 また、バージョンが特定できないとphp.iniファイルの場所も特定できません。
例えば、php8.5とphp8.4がインストールされている環境でphp8.5にmysqli拡張機能をインストールしたとします。 この時、Webサーバがphp8.4を利用している場合はmysqli拡張機能はみつからず、“mysqli php 拡張機能がインストールされ、有効になっていることを確認してください”、となります。
Webサーバがどのphpバージョンを利用しているかの確認方法は何個かありますが、1つはWordpress ダッシュボードのサイトヘルスの情報から確認可能です。 ”サーバー”のセクションにある”PHPバージョン”を確認します。 バージョンが分かればphp.iniファイルもおおむね特定可能です(find コマンドでphp.iniを探した時、PHPバージョンごとに複数のphp.iniが見つかりますが、バージョンがわかればどのphp.iniか特定できる)

あとは情報参照用のphpファイルをWebサーバに配置し、Webブラウザから確認するとバージョンだけではなくphp.iniファイルのパスもわかるのでおすすめです。
情報参照用のPHPファイルの作成は簡単です。 以下の1行のみです。 phpinfo()を呼び出すだけです。
<?php phpinfo(); ?>※ファイル名はなんでもOKです。 逆にinfo.phpのようにありふれた名前で、また、WebサーバのRootディレクトリなどに配置すると危険です。 第三者に見られてしまい、もし、脆弱性のあるバージョンの利用だったりがわかるとそこを足掛かりに不正アクセスを許してしまうかもしれませんので注意しましょう。 この作業が終わったら削除するかpermissionを外しておきましょう(Webサーバのプロセスがreadできない権限へ)
以下は私の環境ですが、php.iniファイルのパスは /etc/php/8.4/apach2/php.ini であることがわかります。
また、この情報で確認することは出来ませんが、mysqliの拡張機能の有効化はphp.iniファイルではなく、Additional.ini となる /etc/php/8.4/apache2/conf.d/20-mysqli.ini に記載しています。

ソフトウェアバージョンの Before / After
今回、OS と MySQL、そして PHP とバージョンアップ作業を行いました。 OS は 18.04 から 20.04 へ、PHP は 7.4 系から 8.3 系へとメジャーバージョンアップを行いました。 その結果、OS と PHP について EOL(Security Patch が標準では提供されない) を迎えているよろしくない状況を解消しました。
PHP のバージョンアップ時に起きた問題と原因
PHP のバージョンアップ作業はすんなりいかず試行錯誤してやっと動作するようになりました。解決まで2時間位かかった気がします。。。 発生した問題は大きく2つです。
- (表面的な問題)php8.3にバージョンアップ後、Wordpressにアクセスすると”502 Bad Gateway”のエラー
- (根本的な問題)php8.3からMySQL (Alibaba Cloud の ApsaraDB for RDS)にアクセスできない
1つ目の問題は php 7.4 から php 8.3 に切り替えると “502 Bad Gateway” でアクセスできない状況でした。
結果がわかったから今になって言えば “502 Bad Gateway” は私固有の Alibaba Cloud の環境に起因するものでトラブルシューティングが複雑になった一番の要因でした。 具体的には ECS インスタンスの前段に Alibaba Cloud の Server Load Balancer を配置しています。 Server Load Balancer から見てWebサイトが正常に機能しないため”502 Bad Gateway”をクライアントに応答していた状態です。 言い換えると Server Load Balancer がなければ直接 Apache からの応答を確認できトラブルシューティングも捗ったと言えます。
最終的なトラブルシューティングをどう行ったかというと、検証用にサーバ環境を新たに準備しました。 ECS インスタンスの複製を作り Server Load Balancer を経由しない単純な構成(ECS インスタンスに Public IP Address を割り当ててクライアントから直接その Public IP Address にアクセスする構成)を新たに構築し問題の切り分けを進めました。
その結果、php 8.3 に切り替え後に WordPress にアクセスすると以下のメッセージがWebブラウザに応答されたため問題の根本原因は PHP に MySQL の extension が不足していることがすぐにわかりました。
Your PHP installation appears to be missing the MySQL extension which is required by WordPress. Please check that the mysqli PHP extension is installed and enabled.
なお、ECSのインスタンスの複製は標準機能で簡単に構築可能です。 ECS インスタンスの snapshot を作成し、その snapshot から Custum Image を作成します。 次に Custum Image から ECS インスタンスを作成するだけです。 ECS インスタンスの課金タイプを従量課金にすることで数時間分、100円にも満たないコストで利用できました。
2つ目の問題の解決は簡単です。 メッセージの通り MySQL のモジュールの不足を確認します。 ちなみにこのエラーメッセージの解決方法を Google Gemini に問い合わせると適切な解決策を得ることができました。

以下のメッセージの対処方法をおしえて
Your PHP installation appears to be missing the MySQL extension which is required by WordPress.
Please check that the mysqli PHP extension is installed and enabled.
このメッセージは、WordPress をインストールまたは実行しようとしたときに表示される可能性があります。これは、PHP に必要な MySQL 拡張機能 がインストールされていないことを意味します。MySQL 拡張機能は、WordPress がデータベースと通信するために必要です。
解決策:
この問題を解決するには、以下の手順を実行します。
- MySQL 拡張機能がインストールされていることを確認する
以下のコマンドを実行して、MySQL 拡張機能がインストールされているかどうかを確認できます。
php -m | grep mysqli
結果:
拡張機能がインストールされている場合、mysqli という行が表示されます。
拡張機能がインストールされていない場合は、何も表示されません。
- MySQL 拡張機能をインストールする
拡張機能がインストールされていない場合は、以下のコマンドを実行してインストールできます。
sudo apt install php-mysqli
注:
使用している Linux ディストリビューションによっては、上記のコマンドが異なる場合があります。
コマンドを実行する前に、必ず sudo コマンドを使用してください。
- Webサーバーを再起動する
拡張機能をインストールしたら、Webサーバーを再起動する必要があります。これにより、新しい設定が読み込まれます。
sudo systemctl restart apache2
注:
使用している Webサーバーによっては、上記のコマンドが異なる場合があります。
- WordPress を再インストールまたはアップグレードする
拡張機能をインストールして Webサーバーを再起動したら、WordPress を再インストールまたはアップグレードする必要があります。これにより、WordPress が新しい拡張機能を認識できます。
WordPress の再インストール:
WordPress のファイルをダウンロードします。 https://wordpress.com/support/com-vs-org/
ダウンロードしたファイルを Webサーバーの適切な場所に解凍します。
Webブラウザを開き、WordPress のインストールディレクトリにアクセスします。
画面の指示に従ってインストールを完了します。
WordPress のアップグレード:
WordPress ダッシュボードにログインします。
左側のメニューから ダッシュボード > アップデート を選択します。
今すぐインストール ボタンをクリックして、利用可能なアップデートをインストールします。
問題解決
上記の手順を実行しても問題が解決しない場合は、以下の点を確認してください。
PHP のバージョンが古い。PHP 7.2 以降を使用していることを確認してください。
MySQL のバージョンが古い。MySQL 5.7 以降を使用していることを確認してください。
php.ini ファイルの設定が正しくない。php.ini ファイルで mysqli 拡張機能が有効になっていることを確認してください。
その他のリソース
WordPress 公式ドキュメント: https://developer.wordpress.org/advanced-administration/before-install/howto-install/
PHP 公式ドキュメント: https://www.php.net/manual/en/install.php
MySQL 公式ドキュメント: https://dev.mysql.com/doc/
参考情報
MySQL 拡張機能をインストールする方法: https://stackoverflow.com/questions/35424982/how-can-i-enable-the-mysqli-extension-in-php-7
php.ini ファイルの設定方法: https://stackoverflow.com/questions/8684609/where-can-i-find-php-ini
この情報がお役に立てば幸いです。
Gemini からの回答のとおり php -m コマンドでmysql の有無を確認します。php7.4 にはインストールされているMySQLモジュールが php8.3には含まれていないことを確認し、追加後は問題が解消しました。
php 7.4 から php8.3への切り替え手順
発生した問題と対応は前述の通りですが、次回のバージョンアップに向けて手順を残しておきます。
まずは php-mysql をインストールします。Gemini の回答では php-mysqli が不足しそれをインストールしましょうとのことでしたが php8.3 では mysqli はphp-mysql に含まれているとのことで以下の通り php-mysql をインストールしました
# apt install php-mysql
あとは WordPress から警告があった必須モジュール gd や dom、imagick、zip、intl もインストールします。
# add-apt-repository ppa:ondrej/php
# apt update
# apt install php8.3-gd
# apt install php8.3-dom
# apt install php8.3-imagick
# apt install php8.3-zip
# apt install php8.3-intl
※ 実はリポジトリに ppa:ondrej/phpを追加したのですが何回やってもリポジトリサーバ(http://ppa.launchpad.net/ondrej/php/ubuntu)との接続が Time Out になりgdのインストールに失敗しました。 ただ、翌日再実行したら成功したので一時的な問題だったようです(最初、Alibaba Cloud 固有の原因があるのかなー、サポートにチケット発行するかーと思っていたのですが解決して何より)
次に Apache の php7.4 を無効化し、php8.3 を有効化し、apache を再起動します。
# a2dismod php7.4
# a2enmod php8.3
# systemctl restart apache2
あとは Web ブラウザから正常にアクセスできることを確認し作業は終了となりました。
以上

