如果你的 phpmyadmin 在 win7/8 上怪怪的 ….

其實我從 phpmyadmin 4.1.0 開始就覺得怪怪了,直到目前最新版 4.1.3 都一樣,有個大問題就是無法看資料表結構。如以下錯誤的截圖 :

phpmyadmin-json-encode-error

我回報了這個 BUG 在以下網址

https://sourceforge.net/p/phpmyadmin/bugs/4207/

既然已經發現問題,當然這個就好解決,不過還是把原因說出來,並且讓大家知道 PHP 本身也存在某些相容性問題要注意

Util.class.php 的 1656 行裏頭有一行

return strftime($date, $timestamp);

只要暫時改成

return date("Y-m-d: H:i:s" , $timestamp);

這樣可以解決無法在 phpmyadmin 看資料表結構的問題

會發生錯誤是因為,phpmyadmin 有很多地方會用 AJAX 的方式要求回傳 json 格式資料,而 php 的 json_encode() 若遇到不正確的 utf8 字則會回傳 false,導致 phpmyadmin 要抓資料表結構的時候回傳一個空的網頁給前端就會出錯了。

這問題就是出在 strftime(),這個 strftime 會根據 OS 的語系及地區設定回傳相對應的編碼字串,而非完全為 utf-8。基本上在我的 Win8 環境下測試他根本不吃 utf-8 字串只吃 big5。

因此以下這段完全以 utf-8 字串寫成的 code ,其中年,月,日三個字的中文在 win8 中文版和 CentOS Linux 下將會得到不同結果

echo strftime("%Y 年 %m 月 %d 日 %H:%M", time());

如此就會造成 json_encode 的編碼發生錯誤了,請大家寫 PHP 也注意一下這個相容性問題。

11 則評論在 如果你的 phpmyadmin 在 win7/8 上怪怪的 …..

  1. 哈囉Pigo
    目前最新的4.4.2版已經解決了這個問題
    解決的辦法在你PO的那個討論串裡面有寫
    而且以後也不用改成
    return date(“Y-m-d: H:i:s” , $timestamp);
    改成這樣反而執行時有錯說,我試過了

發佈留言