PHP8.1.xとphpMyAdmin5.1.x組み合わせ時の表示バグ【Ubuntu20.04】

PHP8.1系+phpMyAdmin5.1系の表示時のjavascriptエラー対応

phpMyAdminの表示エラー状況確認

phpMyAdminへログインした際に、通常ならば左側に表示されるはずのメニュー項目や、上部メニューにフォーカスを合わせた際に表示される詳細メニューなどが全く表示されない状態になった。考えられる原因は、phpMyAdminのバージョンアップだと思われる。

どのような状況かは下記画像を参照。

PHP8とphpMyAdminのバージョンによっては表示バグが起こる参考画像

左側のメニュー項目については、一旦出力されるのだが、すぐに非表示になってしまうという状況。display:none;でもしているのかなと思い、ブラウザの「要素の検証」から調べてみるが、メニュー項目の親要素の中身を後からごっそりと削除している模様。

つまり、あとからjavascriptで要素の中身をemptyしているということ。

このような例外処理をする場合は大抵、サーバーから取得してきた内容をそのまま表示させられない状況だからこそ「empty」しているはず。

ちなみに、ブラウザの「要素の検証」の「コンソール」は下記のエラーを吐いていた。

phpmyadminのjavascriptエラーの内容

コピペで検索しやすいよう下記に文字列も添えておきます。

Uncaught SyntaxError: Unexpected token u in JSON at position 0
    at JSON.parse ()
    at Object.success (functions.js?v=5.1.4deb1%2Bfocal1:5428:30)
    at fire (jquery.min.js?v=5.1.4deb1%2Bfocal1:2:12157)
    at Object.fireWith [as resolveWith] (jquery.min.js?v=5.1.4deb1%2Bfocal1:2:13328)
    at done (jquery.min.js?v=5.1.4deb1%2Bfocal1:4:27808)
    at XMLHttpRequest. (jquery.min.js?v=5.1.4deb1%2Bfocal1:4:31149)


Uncaught SyntaxError: Unexpected token u in JSON at position 0
    at JSON.parse ()
    at Object.success (functions.js?v=5.1.4deb1%2Bfocal1:5428:30)
    at fire (jquery.min.js?v=5.1.4deb1%2Bfocal1:2:12157)
    at Object.fireWith [as resolveWith] (jquery.min.js?v=5.1.4deb1%2Bfocal1:2:13328)
    at done (jquery.min.js?v=5.1.4deb1%2Bfocal1:4:27808)
    at XMLHttpRequest. (jquery.min.js?v=5.1.4deb1%2Bfocal1:4:31149)

上記のエラーの「Uncaught SyntaxError: Unexpected token u in JSON at position 0」だが、undefinedをjsonパースしてしまっているということでエラー。当該jQuery修正すれば良いのですが、それはそれはとても面倒なことなので、おそらくバージョンさえ変更してしまえば修正されるはずです。

外部情報を調査

下記URLにてドンピシャリな状況を見つけられました。誰だか知らないけれど、本当にどうもありがとう。

参考:PHP 8.1 と phpMyAdmin を Ubuntu PPA で新規インストールすると、ログイン ページが表示され、正常にログインできます。ログイン後、横メニューしか見えません。左側のメニューでは、データベース名が非常に短時間表示され、すぐに消えます。

上記URLの質問ユーザーのエラーでは、PHP8.1.3&phpMyAdmin5.1.3とのことで、私の場合はPHP8.1.8&phpMyAdmin5.1.4。

このphpMyAdmin5.1.xあたりが安定しないバージョンなのかもしれない。

上記URLの質問ユーザーは、phpMyAdmin5.2.0へバージョンを上げたらjavascriptのエラーが消えた模様。

ということで、phpMyAdminのバージョン上げてみることにした。

phpMyAdminのアップグレード

今回はバージョンによって差が生じる可能性があるので、手動でバージョンを変更してみたいと思います。

現在のところ最新版が5.2.0ということなので、この5.2.0にしていきたいと思います。

適宜データベース・旧phpMyAdminのバックアップは取得しておくこと。

参考:phpMyAdmin最新版ダウンロード

$ sudo service mysql stop
$ sudo service apache2 stop

下記の5.2.0の部分を変更することによって、適宜バージョンを変更できます。

最終的に「/usr/share/phpmyadmin」へ移動するので、ダウンロード場所はどこでも構いません。移動後にダウンロードしてきた物を削除します。

$ sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-all-languages.zip
$ sudo unzip phpMyAdmin-5.2.0-all-languages.zip
$ sudo mv phpMyAdmin-5.2.0-all-languages /usr/share/phpmyadmin
$ sudo rm phpMyAdmin-5.2.0-all-languages.zip

最初にインストールされた方は、下記のように適切な権限を割り振ってください。既にtmpディレクトリが用意され下記のように権限の割り振りが済んでいるようなら下記コマンドは無視してください。

$ sudo mkdir /usr/share/phpmyadmin/tmp 
$ sudo chown -R www-data:www-data /usr/share/phpmyadmin 
$ sudo chmod 777 /usr/share/phpmyadmin/tmp

「/etc/apache2/conf-available/phpmyadmin.conf」の設定やセキュリティについては下記を参考にしてください。

【Ubuntu20.04】phpMyAdminの簡単セキュリティ強化3つのステップ【Apache2】

「/etc/apache2/conf-available/phpmyadmin.conf」の注意点として、上記参考記事を継承して書くと、

$ sudo vim /etc/apache2/conf-available/phpmyadmin.conf
# 変更前
# Alias /phpmyadmin /usr/share/phpmyadmin
# Alias /phpMyAdmin /usr/share/phpmyadmin
Alias /セキュリティのため第三者に推測し難い文字列へ変えた部分 /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin/>
   AddDefaultCharset UTF-8
   AllowOverride All
   SSLRequireSSL
   <IfModule mod_authz_core.c>
      <RequireAny>
         Require all granted
      </RequireAny>
   </IfModule>
</Directory>
<Directory /usr/share/phpmyadmin/setup/>
   <IfModule mod_authz_core.c>
      <RequireAny>
         Require all granted
      </RequireAny>
   </IfModule>
</Directory>
# 変更後
# Alias /phpmyadmin /usr/share/phpmyadmin
# Alias /phpMyAdmin /usr/share/phpmyadmin
Alias /セキュリティのため第三者に推測し難い文字列へ変えた部分 /usr/share/phpmyadmin/phpMyAdmin-5.2.0-all-languages
<Directory /usr/share/phpmyadmin/phpMyAdmin-5.2.0-all-languages/>
   AddDefaultCharset UTF-8
   AllowOverride All
   SSLRequireSSL
   <IfModule mod_authz_core.c>
      <RequireAny>
         Require all granted
      </RequireAny>
   </IfModule>
</Directory>
<Directory /usr/share/phpmyadmin/phpMyAdmin-5.2.0-all-languages/setup/>
   <IfModule mod_authz_core.c>
      <RequireAny>
         Require all granted
      </RequireAny>
   </IfModule>
</Directory>

phpMyAdmin5.2.0を「/usr/share/phpmyadmin」の中へ入れたので、それに合わせたディレクトリに変更すること。それに加えて、.htaccessでBasic認証を施しているならば、一つ階層を下げたところにも設置してあげる必要がある。既存のものをそのまま上書きしてしまっても良いのだが、もしものために残しておくのもありだと思う。また、一手間加えて各バージョンごとにディレクトリを用意して都度対応できるようにしておくと何かと便利かも。

さて、最後に設定を反映させて表示を確認しましょう。

$ sudo service mysql restart
$ sudo service apache2 restart

phpMyAdminアップグレード後の確認

下記画像のように見事表示されました。

PHP8.1系とphpmyadmin5.1系のエラー修正完了

という具合にうまく行きましたが、現時点においてPHP8はまだ新しいということもあり、phpMyAdaminも対応仕切れていない様子です。したがって、今後も不具合があるかと思いますが、こういったことは日常茶飯事なので生暖かい眼で見守っていきましょう。

About Naoki 24 Articles
デザインを含めたフロントエンドから、インフラ含めたバックエンドまで広く浅く活動しているエンジニアです。主にSaasの開発・営業・運営管理などをしております。毎日デスマーチがモットーなブラックエンジニアです。 私が管理しているクラウドソフトウェアがこちらです→まとめツール倶楽部『MTCsystem』

Be the first to comment

Leave a Reply

Your email address will not be published.


*


CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)