與 PHP Fog 的第一次親密接觸

前言

相信許多人都有開發 PHP 的相關經驗,豐富的資源及其便利性皆為不可忽視的優點,程式本身撰寫起來也相對容易,相較之下環境建置及部署反而成為許多開發者的困擾。PHP Fog 透過 PaaS 的方式減輕了開發者在這方面的負擔,透過幾個簡單的步驟便將開發時所需的環境及資料庫設定完成,並且提供許多 Framework 可直接選用,讓開發者能更專注於程式開發。以下將透過 PHP Fog 平台簡易實做 PHP 程式開發。

註冊

開始使用 PHP Fog 前,必須註冊帳號才能建置開發的程式。首先連至 PHP Fog 官方網頁,在首頁就可以找到明顯的〔Get Started〕的字樣,簡單填寫信箱和設定密碼後即可直接註冊帳號。

▲ 圖1: 註冊欄位

▲ 圖1:註冊欄位

接著會要求選擇使用哪種類型的程式,分成 Applications 及 Frameworks 兩種類型,可依自己的需求選擇。本文將上傳自行撰寫之程式碼作為範例,故此處選擇 Frameworks 中的〔Custom App〕,若有疑問也可點選〔more info〕查看相關訊息及說明。

▲ 圖2: applications 選擇

▲ 圖2:applications 選擇

下一步需要填入 MySQL 密碼及對應的 Domain 位置,PHP Fog 預設會針對每個應用設定一個對應 Domain (*.phpfogapp.com),此處依據自己之需求填寫即可。

▲ 圖3: 密碼設定

▲ 圖3:密碼設定

到此已經完成基本的環境設定,還需要一些時間完成初始化,藉由畫面中的 Status 可確認是否部署完成,一般來說不會太久。

▲ 圖4: status變化

▲ 圖4:status變化

程式開發及上傳

完成前述設定後,便可進行程式開發上傳。首先必須先設定好本地端工作環境。PHP Fog 採用 Git 管理程式碼,順便管控檔案版本。若不熟悉 Git,可參考官方網站提供的說明教學。使用 Git 操作檔案時必須透過 SSH 的方式進行,因為不同平台的設定方式會有些許差異,此處用 Linux (Ubuntu) 做介紹,其他平台建議可參考官方提供的教學設定

使用 Git 前必須先設定公鑰、私鑰,藉以辨別開發者身分和管理程式碼,接著會介紹如何設定公鑰及私鑰。

可透過 ssh-keygen 指令產生公鑰、私鑰,此處選擇使用 RSA 加密演算法來產生需要的公鑰、私鑰。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/USER/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Your identification has been saved in /home/USER/.ssh/id_rsa.
Your public key has been saved in /home/USER/.ssh/id_rsa.pub.

在設定過程中會詢問公鑰、私鑰存放的路徑,此處可依個人需求設定,通常直接使用系統預設的路徑即可。另外需注意系統會詢問 passphrase 設定,此設定主要是為了確保金鑰的安全而建的第二道防線,在 Git 操作時會再度詢問。建議設定後記錄下來,每次操作時皆會詢問。

完成後可於先前設定的路徑中找到公鑰 (id_rsa.pub)、私鑰 (id_rsa) 檔案,將公鑰內容複製起來,接著至 PHP Fog 設定 Public Key 的欄位貼上送出(Nickname 的地方可選擇不填,會依照貼上的公鑰內容設定顯示),完成後即可和 PHP Fog 同步程式碼進行編寫及修改。

▲ 圖5: ssh key設定

▲ 圖5:ssh key設定

設定完 SSH Public Key 之後,網頁會很貼心得顯示對應的 git clone 指令,將網頁內提供之 git clone 指令直接複製貼上到本機執行,即可將程式碼複製到對應的資料夾中。在操作時可能會要求輸入 passphrase,輸入產生公鑰、私鑰時設定的 passphrase 內容即可。

$ git clone 
  這個 E-mail 地址已經被防止灌水惡意程式保護,您需要啟用 Java Script 才能觀看
 :your_domain_name.phpfogapp.com

一開始選擇不同的應用,複製下來的程式內容也不相同。本範例選擇的是 Custom App,在複製下程式碼後,資料夾中已經包含 index.php 檔案,在此處修改新增 phpinfo() 函式,檢查是否正確顯示出 PHP 相關資訊。

    <!?php
    phpinfo();
    ?>

最後透過 git push 上傳修改過的程式碼。

$ git commit -a -m 'Add phpinfo() for test'
$ git push

上傳完成後,可至網站中對應之「Share cloud」,點選「View live site」連結至先前設定的網站。   由網頁內容判斷確實已按照修改後的內容呈現,同時得知目前 PHP Fog 使用的 PHP 版本為 5.3.2。

▲ 圖6: phpinfo 頁面

▲ 圖6:phpinfo 頁面

MySQL 資料庫建置與使用

PHP Fog 中每個 app 都會配置 MySQL 供開發者使用,在設定 app 時,會一併要求設定 MySQL 的密碼。在網頁中可直接點選〔Launch phpMyAdmin〕,進入 phpMyAdmin 登入頁面後輸入帳號密碼,便可配置開發時所需要的資料庫環境。(註:phpMyAdmin 為一套用 PHP 為基礎,以 Web-Base 方式架構在主機上的 MySQL 資料庫管理工具。)

▲ 圖7: phpMyAdmin

▲ 圖7:phpMyAdmin

此處先利用 phpMyAdmin 建立一個測試資料表及測試資料。於 phpMyAdmin 介面中的左側選單可找到【建立資料表】的選項,點選進入後設定資料表名稱和其欄位設定,即可完成資料表的新增。此處建立一個資料表名稱──testable,以及兩個欄位──Column1 (int)、Column2 (text)。

▲ 圖8: 資料表新增

▲ 圖8:資料表新增

若資料表順利建立,在 phpMyAdmin 介面的左側選單應可看見新增的資料表名稱,點選後可以看到資料表的細節設定。接著可選擇右側上方選單的【插入】選項新增資料,按照欄位設定填入設定值,點選〔執行〕即可完成測試資料的新增。

▲ 圖9: 資料庫內容

▲ 圖9:資料庫內容

建立完測試資料表及測試資料後,接著透過簡單的 PHP 程式範例操作 MySQL。PHP Fog 在網站中貼心得提供撰寫 PHP 時連線使用資料庫的程式範例。此處需注意,網站範例中會自動帶入 Server 名稱、username 等訊息,但是 password 的部分則需自己填入。

▲ 圖10: code範例

▲ 圖10:code範例

按照範例撰寫,成功讀出資料庫中的測試資料。

 

<?php
$con = mysql_connect(
        $server = "db01-share",
        $username = "Custom App-*****",
        $password = "your_password");
mysql_select_db("yourDomainName_phpfogapp_com", $con);
$result = mysql_query("SELECT * FROM table");
echo "<table border="1">
<tr>
<th>Column1</th>
<th>Column2</th>
</tr>";
while($row = mysql_fetch_array($result)) {
        echo "<tr>";
        echo "<td>" . $row['Column1'] . "</td>";
        echo "<td>" . $row['Column2'] . "</td>";
        echo "</tr>";
}
echo "</table>";
mysql_close($con);
?>

此處需注意,網頁中提供的連線範例主要是透過 mysql_connect 函式做連線,PHP5 後建議使用 PDO 的方式連線至資料庫,以提升彈性及安全性。

<?php
$dsn = "mysql:host=db01-share;dbname= yourDomainName_phpfogapp_com ";
$dbh = new PDO($dsn,' Custom App-*****', 'your_password');
$result = $dbh->query(' SELECT * FROM table '); echo "
<table border='1'>"; <tr>
</th>Column1</th>
</th>Column2</th>
</tr>

while($row = $result->fetch()){ echo "<tr>"; echo "<td>" . $row['Column1'] . "</td>"; echo "<td>" . $row['Column2'] . "</td>"; echo "</tr>"; } echo "</table> ?>

▲ 圖11: 顯示網頁

▲ 圖11:顯示網頁

開發時需注意的地方

I. error log 無法讀取

在開發 PHP 程式時難免需要查看 error log 檢查程式哪邊出了問題,目前 PHP Fog 平台尚未提供查看 error log 的功能,根據網站的說明,此功能正在實作中。

若需要查看 PHP 的錯誤訊息,目前可以先使用這個方法。於程式碼中加上:

error_reporting(E_ALL);
ini_set('display_errors', '1');

透過 display_errors 的設定直接將錯誤訊息顯示於網頁中,但上線時切記要移除,畢竟錯誤訊息只適合給開發者看到。

II. 部分 PHP 指令無法使用

PHP Fog 為了確保系統及開發者環境的安全,對 PHP 部分函式做出限制。例如:system()、exec() 一類的系統函式就無法使用,詳細的列表可參閱官方網頁的說明

結語

PHP Fog 透過 PaaS 的方式幫助開發者快速部署需要的環境,減低以往部署的負擔。另外同時提供許多 Framework 讓開發者直接套用,無論是剛開始接觸的新手或是已有經驗的開發者都能受惠。透過 Git 上傳的方式同時兼顧了檔案的版本控管,這也是很不錯的地方,但對剛開始接觸的開發者而言,這可能是需要預先學習的課題。在這些便利的背後,也存在必須負擔的成本,例如環境及功能上的限制。對於大型專案的開發者,必須要考量 PHP Fog 是否能滿足各方面的需求。總的來說,若您對雲端有興趣,又選擇撰寫 PHP,PHP Fog 是個很好的選擇。

作者簡介

Loyo
這個 E-mail 地址已經被防止灌水惡意程式保護,您需要啟用 Java Script 才能觀看
Plurk: fulamce
目前於中華電信研發替代役服役中,同時為NISRA團隊成員。
Snake
這個 E-mail 地址已經被防止灌水惡意程式保護,您需要啟用 Java Script 才能觀看
Plurk: SiaoLynx
目前就讀於輔仁大學資工系,同時為 NISRA 現任會長。
充滿好奇心,喜歡體驗各式新奇有趣的事物。
Allen Own
這個 E-mail 地址已經被防止灌水惡意程式保護,您需要啟用 Java Script 才能觀看
Plurk: allenown
Facebook: allenown
Twitter: allenown
NISRA 創辦人



自由軟體鑄造場電子報 : 第 188 期 PaaS:程式語言開發在雲端「Programming in Paas」(下)
標籤: PHP Fog,   PaaS,   platform as a service,   PHP,   Programming on PaaS,  
分類: 技術專欄