Www.ncu.edu.tw 之PHP4版本的 mysql client 3.23.58 無法支援 MySQL 4.1 以上版本資料庫連接?

出自 NCUCCWiki
前往: 導覽搜尋
  • 問題描述:以www.ncu.edu.tw 之PHP4版本的 mysql client 3.23.58 無法連線 MySQL 4.1 以上版本資料庫
  • 錯誤訊息: Client does not support authentication protocol requested by server; consider upgrading MySQL client
  • 原因:因為 MySQL 4.1 以上版本為了提高安全性,使用了新的密碼驗證機制。如此,MySQL 的 Client Library 需要 4.0 版本以上。但目前在 Client 端所使用的 PHP 版本若為 5.0 以下(如 4.3.9),其內建的 MySQL Library 大都為 3.23,並不支援新版的密碼驗證機制。
  • 解決方案(以下擇其一):
  1. 將 PHP 升級為 5.0版以上
  2. 切換 PHP 4 的 MySQL extension 為 MySqlLi
  3. 在 MySQL console 下,更新密碼形式改為 OLD_PASSWORD() (設回原來舊版的密碼驗證機制):
mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd') WHERE Host = 'some_host' AND User = 'some_user';
mysql> FLUSH PRIVILEGES;
  • 短期解決方案:(2008/05/23)
因為短期間無法馬上更新www.ncu.edu.tw的PHP版本至PHP5,會影響在原PHP4開發的網頁無法正常顯示,暫時解決如下:
電算中心另有一部 web.cc.ncu.edu.tw是去年才安裝,主要用來提供學生網頁空間,
這部機器安裝PHP5版本,透過這個版本的 mysql client ,應該可以連結MySQL 4.1 以上版本資料庫,
再透過網頁轉址的設定,使用者對外公告的 http://www.ncu.edu.tw/~xxxxx / 網址仍可以沿用。
這個短期解決方案須配合修改兩個檔案,加入我們測試過的程式碼如下:
一、修改 index.php ,於程式開頭,加入以下轉址程式碼:
<?php
        $webhost = "web.cc.ncu.edu.tw";
        if ($_SERVER["SERVER_NAME"] != $webhost) {
                $url = 'http://' . $webhost . $_SERVER["PHP_SELF"];
                header ("Location: $url");
        }
?>

二、修改連接mysql server 的程式(例:connectDB.php),於程式開頭,加入以下 load mysql module 程式碼:
<?php
        if (! function_exists ('mysql_query')) {
                if (! @dl('mysql.so')) {
                        echo "Could not load mysql extension";
                        exit;
                }
        }
?>

參考網址:http://www.kenming.idv.tw/index.php?title=a_cs_eu_a_mysql_4_1_7_and_php_4_3_x_a_se&more=1&c=1&tb=1&pb=1