phpMyAdmin5.0.1のエクスポートエラー解決方法

phpMyAdmin5.0.1のエクスポートエラー解決方法です。

phpMyAdmin5.0.1のエクスポートエラー解決方法

XAMPPのバージョンを XAMPP7.4.1 にて発生した現象です。phpMyAdminでエクスポートを実行し、ダウンロードされたsqlファイルを開くと下図のような状態でした。

XAMPPのバージョンをXAMPP7.4.1にて発生した現象

Fatal error: Uncaught TypeError: mb_detect_encoding() expects parameter 1 to be string, bool given in D:/xampp/phpMyAdmin/libraries/classes/Util.php:1620

Stack trace:

#0 D:/xampp/phpMyAdmin/libraries/classes/Util.php(1620): mb_detect_encoding(false, 'UTF-8', true)

#1 D:/xampp/phpMyAdmin/libraries/classes/Plugins/Export/ExportSql.php(725): PhpMyAdmin/Util::localisedDate()

#2 D:/xampp/phpMyAdmin/export.php(444): PhpMyAdmin/Plugins/Export/ExportSql->exportHeader()

#3 {main}

thrown in D:/xampp/phpMyAdmin/libraries/classes/Util.php on line1620

ふぁ?!sqlファイルだと思ったら、エラーログっぽい・・・。これは困った・・。

ここでは phpMyAdmin5.0.1のエクスポートエラー解決方法 を紹介します。


Util.phpを修正する

エラーログの通り、Util.phpの1620行目でプログラムが停止したのであれば、その場所を調べるしかありません。

Util.phpの1620行目

エラーログにはmb_detect_encoding()はパラメーター1が文字列であると想定しているとあります。つまり1620行目に問題ありってことですね。

mb_detect_encoding(false, 'UTF-8', true)

原因は$retを返してくる1617行目の下記の箇所にある。

$ret = strftime($date, (int) $timestamp);

ここがfalseを返すから問題。調べてみると日本語の時だけ発生する文字化け問題の模様。なので下記のように修正します。

//$ret = strftime($date, (int) $timestamp);
$ret = strftime('%Y-%B-%d %H:%M', (int) $timestamp);

Util.phpの1617行目のstrftime関数の第1引数を変更

ふむ、これでOKですね。

文字化け発見

不思議なことにUtil.phpの2528行目付近に文字化けを発見した。

Util.phpの2528行目付近に文字化けを発見

なんか影響あると困るのでGitHubのソースの通り改修。

__('Jump to database "%s".'), 
Util.php

ふむ、これでOKですね。

参考サイト

今回の原因について詳しく解説してくれています。ありがとうございます。

phpMyAdmin5.0.1の「状態」タブがFatal Errorで表示されないバグ - Crieit

まとめ

phpMyAdmin5.0.1のエクスポートエラー解決方法を紹介しました。

ちょうど移行作業をしたところで起こった問題だったので結構焦ったなぁー。

次のバージョンでは不具合修正されることを祈ります。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。