星期一, 5月 12, 2008

怠惰的程式員設計的 php template engine

想要從敝系畢業的話,必須先考過系上的程式能力檢定。雖然他有提供練習用伺服器,但是用起來很囉唆,要裝一堆軟體、設定 IP 等等有的沒的。

為了讓拙荊方便練習,上學期中我就抽空寫了個功能目標類似的小網站給她,還有其他程檢沒過的同學們玩。不過... 到最後來玩的都是過的,沒過的都懶得玩 = =

Anyway,這門零學分不上課的必修課可是系上唯一有開暑修的課,意思是說這些沒過的傢伙暑假又得再考一次。於是我想把上學期寫的這個東西拿出來整理一下,看看有沒有可以改進的地方...

想進化的第一個門檻就是,之前寫的時候時間有點趕,整個程式以 procedural 為主,完全沒有考慮到安全性、擴充性、與維護等等議題。首先把 Program 與 Presentation 分開,就需要用到一個 template engine。但是 php 的 template engine 都是 Smarty 一類的大傢伙,我實在不想也懶得把他抓進來放到我這只有兩三個檔案的小專案裡面。於是,這個東西就誕生了!

<?php
// 設定 Template 檔案所在目錄
define('_STUPIDITY_TEMPLATE_DIR_', '/home/username/public_html/project_name/stupidity');

class Stupidity
{
    function assign($key, $value)
    {
        $this->_assigned[$key] = $value;
    }

    function get($key)
    {
        return $this->_assigned[$key];
    }

    function say($key)
    {
        echo $this->_assigned[$key];
    }

    function render()
    {
        global $stupidity;
        include_once(_STUPIDITY_TEMPLATE_DIR_ . '/' .
            $this->template_filename);
    }
}

$stupidity = new Stupidity();

?>

用起來也很簡單,在程式的部份先 include stupidity.php,設定 template filename,assign 資料以後,再 render 就行了:

====== index.php ======
<?php
include('stupidity.php');
$stupidity->template_filename = 'index.stupid';
$stupidity->assign('author', 'Palatis');
$stupidity->render();
?>

====== stupidity/index.stupid ======
<html>
  <head>
    <title>I N D E X</title>
  </head>
  <body>
    <h1>I N D E X</h1>
    <p>Copyright 2008 by <?php $stupidity->say('author'); ?>.>/p<
  </body>
</html>

BSD License!不過我沒有對它作過任何測試,如果爆掉的話就... 好自為之喔!

BTW... 這個檢定系統 Google 會想買嗎?XD~

[Palatis 告訴你] 什麼是 DoS、DDoS 攻擊?

DoS 是 Denial of Service 的縮寫,翻譯成中文就是「阻斷服務攻擊」。這個種類的攻擊,應該大部分的未成年人都遭受過:

你半夜偷偷上網,結果老媽進來把電源拔掉。
應該是最常發生也最常見的 DoS。

至於 DDoS 則是 Distributed Denial of Service,即「分散式阻斷服務攻擊」:

你半夜偷偷上網,結果老爸老媽姑姑嬸嬸叔叔伯伯一起進來,一個抓住你的手、一個抓你腳、一個擋住你眼睛、一個拔掉你電源線、一個拔掉網路線。
這樣就是 DDoS。