想要把Laravel PHP的程式部署到Azure上,原本覺得是一件很簡單的事情,因為前一陣子才在Azure上用WordPress建立我自己的部落格,前後也才花不到幾分鐘,一樣是用MySQL In App的方案(因為它便宜)。
台中的阿鴻來訊息說:phpMyAdmin連不上MySQL,我想說你這個肉腳,我來試試,再來教你,哈~哪來的自信阿….想不到竟然花了我約一週的時間,還好有Ming哥說他也被雷到,才找到一點蛛絲馬跡。
Step01.開設完Web App之後,可以在左側選單找到MySQL In App,點進去之後照官方說法,點管理之後,就可以開啟phpMyAdmin。
Step02. 需要輸入帳號密碼喔,但在哪裡? (官方文章沒有寫得很清楚,但很多人卡在這一關),上圖說明的位置,可以點”深入了解“進去了解一下。
Step03.目前根據技術文件是說可以使用程式的方法進獲得連線資訊
$connectstr_dbhost = ''; $connectstr_dbname = ''; $connectstr_dbusername = ''; $connectstr_dbpassword = ''; foreach ($_SERVER as $key => $value) { if (strpos($key, "MYSQLCONNSTR_localdb") !== 0) { continue; } $connectstr_dbhost = preg_replace("/^.*Data Source=(.+?);.*$/", "\\1", $value); $connectstr_dbname = preg_replace("/^.*Database=(.+?);.*$/", "\\1", $value); $connectstr_dbusername = preg_replace("/^.*User Id=(.+?);.*$/", "\\1", $value); $connectstr_dbpassword = preg_replace("/^.*Password=(.+?)$/", "\\1", $value); } $link = mysqli_connect($connectstr_dbhost, $connectstr_dbusername, $connectstr_dbpassword,$connectstr_dbname); if (!$link) { echo "Error: Unable to connect to MySQL." . PHP_EOL; echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL; echo "Debugging error: " . mysqli_connect_error() . PHP_EOL; exit; } echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL; echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL; mysqli_close($link);
Step04.於是我就寫一隻index.php程式,丟到網站跟目錄。回應如下:
Success: A proper connection to MySQL was made! The my_db database is great. Host information: 127.0.0.1:52318 via TCP/IP
Step05.執行完index.php之後,在去點管理即可連到phpMyAdmin。(Why…?)
Step05.使用FTP連入Web App
你可以發現有一個檔案 MYSQLCONNSTR_localdb.txt 是本來沒有的,但是執行過index.php,他就被產生出來,內容如下:
Database=localdb;Data Source=127.0.0.1:52318;User Id=azure;Password=6#vWHD_$
內建的phpMyAdmin應該是靠這個檔案,才可以不用帳密連入。
根據官方說法,MySQL In App的連線資訊是會變動的,我實際重開App發現是port號會變動,原本127.0.0.1:52318 變成 127.0.0.1:58806,這也是為什麼php的連線資訊是要去抓MYSQLCONNSTR_localdb.ini的設定了。
看來英文能力要加強一下了,官方文件寫的也沒錯,只是自己看不懂,哈~哈~