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

左側のメニュー項目については、一旦出力されるのだが、すぐに非表示になってしまうという状況。display:none;でもしているのかなと思い、ブラウザの「要素の検証」から調べてみるが、メニュー項目の親要素の中身を後からごっそりと削除している模様。
つまり、あとからjavascriptで要素の中身をemptyしているということ。
このような例外処理をする場合は大抵、サーバーから取得してきた内容をそのまま表示させられない状況だからこそ「empty」しているはず。
ちなみに、ブラウザの「要素の検証」の「コンソール」は下記のエラーを吐いていた。

コピペで検索しやすいよう下記に文字列も添えておきます。
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にてドンピシャリな状況を見つけられました。誰だか知らないけれど、本当にどうもありがとう。
上記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のバックアップは取得しておくこと。
$ 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」の設定やセキュリティについては下記を参考にしてください。
「/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 restartphpMyAdminアップグレード後の確認
下記画像のように見事表示されました。

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


Be the first to comment