關於 PHP, Linux, Open Source 及個人生活記載的網誌。
RSS icon
  • 開源磁碟加密軟件 — TrueCrypt

    Posted on May 30th, 2007 Sam Tang No comments

    TrueCrypt 是一個開源的磁碟加密軟件,支援 Windows Vista/XP/2000 及 Linux。

    主要功能包括:
    – 建立虛擬加密磁碟。
    – 對硬碟分割區或儲存裝置 (如 USB flash drive) 加密。
    – 支援自動及實時加密。
    – 支援 AES-256, Serpent 及 Twofish 等演算法。

    下載: TrueCrypt


  • PHP 編寫 BBCode 函式

    Posted on May 27th, 2007 Sam Tang 1 comment

    現在一些主流的論壇或 Blog 回應,也是用 BBCode 作為更改文字式樣的語法。因為 BBCode 一般上只可以定義粗體、斜體、加底線、文字顏色及插入超連結等,而不可以插入 html tags 及 javascript,以下是用 PHP 製作 BBCode 函式的方法。

    首先第一步是要將 html tags 轉換,例如 '<' 轉換成 '&lt;',這個可以用 htmlentities() 函式實現:

    PHP:
    1. <?php
    2. function bbcode_convert($string){
    3.     return htmlentities($string, ENT_QUOTES);
    4. }
    5. ?>

    然後便要編寫字體式樣的部份,包括有[b]、[i]、[u]、[ur] 及 [img],這裡開始要用正規表達式來做:

    PHP:
    1. <?php
    2. function bbcode_convert($string){
    3.     // 移除 HTML tags
    4.     $string = htmlentities($string, ENT_QUOTES);
    5.  
    6.     // 處理 [b] 及 [/b] 的粗體字
    7.     $string = preg_replace ('/\[b\](.*?)\[\/b\]/is', '<strong>$1</strong>', $string);
    8.     // 處理 [i] 及 [/i] 的斜體字
    9.     $string = preg_replace ('/\[i\](.*?)\[\/i\]/is', '<em>$1</em>', $string);
    10.     // 處理 [u] 及 [/u] 的底線字
    11.     $string = preg_replace ('/\[u\](.*?)\[\/u\]/is', '<u>$1</u>', $string);
    12.  
    13.     // [url] 超連結
    14.     $string = preg_replace('/\[url\](.*?)\[\/url\]/is', '<a href="$1">$1</a>', $string);
    15.     // [url=url] 超連結
    16.     $string = preg_replace('/\[url\=(.*?)\](.*?)\[\/url\]/is', '<a href="$1">$2</a>', $string);
    17.  
    18.     // [img] 圖片
    19.     $string = preg_replace('/\[img\](.*?)\[\/img\]/is', '<img src="$1" />', $string);
    20.  
    21.     return $string;
    22. }
    23. ?>

    現在已經完成了最基本的 BBCode,但可以將以上程式碼簡化,還可以選進執行效能。以上總共呼叫了 6 次 preg_replace() 函式,而實際上 preg_replace() 是可以用 array 作為搜索字串及替換字串的,所以可以改為只呼叫 preg_replace() 函式兩次,那麼程式碼會這樣:

    PHP:
    1. <?php
    2. function bbcode_convert($string){
    3.     // 移除 HTML tags
    4.     $string = htmlentities($string, ENT_QUOTES);
    5.  
    6.     $bbcode_search = array(
    7.                 '/\[b\](.*?)\[\/b\]/is',
    8.                 '/\[i\](.*?)\[\/i\]/is',
    9.                 '/\[u\](.*?)\[\/u\]/is',
    10.                 '/\[url\=(.*?)\](.*?)\[\/url\]/is',
    11.                 '/\[url\](.*?)\[\/url\]/is',
    12.                 '/\[img\](.*?)\[\/img\]/is'
    13.                 );
    14.  
    15.     $bbcode_replace = array(
    16.                 '<strong>$1</strong>',
    17.                 '<em>$1</em>',
    18.                 '<u>$1</u>',
    19.                 '<a href="$1">$2</a>',
    20.                 '<a href="$1">$1</a>',
    21.                 '<img src="$1" />'
    22.                 );
    23.  
    24.     return preg_replace($bbcode_search, $bbcode_replace, $string);
    25. }
    26. ?>

    這個 BBCode 函式已經大致上完成,你可以按照自己的需要加入各種語法,原理與以上的做法相同。


  • 升級到 Ubuntu 7.04

    Posted on May 24th, 2007 Sam Tang No comments

    Ubuntu 7.04 Feisty Fawn 在上個月已經發佈,但一直沒有時間升級,今日趁假期將原有的 Ubuntu 6.06 升級。因為沒有特別的設定,只是將 /home/username 目錄備份到 USB 手指裡面,然後移除舊系統並重新安裝,最後連用 apt-get 安裝 msttcorefonts 就完成。

    升級後最大的驚喜是 "Ubuntu restricted extras" 套件。以往 Linux 對有專利技術的檔案格式預設也不支援,要安裝也要花一點時間。現在 Ubuntu 可以透過 "Ubuntu restricted extras" 套件庫一次安裝多個套件,令 Ubuntu 支援專利格式的多媒體內容,套件包括有專利多媒體格式支援、Adobe Flash Player、Sun Java。安裝方法如下:

    開啟 "Add/Remove Application",在右上角的 Show 欄位選擇 "所有可安裝程序",然後選擇安裝在 "其他" 類別的 "Ubuntu restricted extras" 就完成了。

    個人覺得 Ubuntu 的開發團隊確實下了不少功夫,而新增的功能多數除了十分實用外,也主要為了迎合大眾使用者。


  • 強制刪除檔案工具 — killBox

    Posted on May 23rd, 2007 Sam Tang 9 comments

    在 Windows 下有時想要刪除某些檔案,但又怎麼都刪除不到。而 killBox 就是可以刪除正在使用中的檔案,不管是 EXE 還是 DLL 檔也沒問題。一般中了病毒或木馬便會有以上情況,killBox 確實是刪除病毒及木馬的好工具。

    官方網站: killBox


  • 15 個免費 SQL Injection Scanners

    Posted on May 22nd, 2007 Sam Tang No comments

    現時很多網站應用程式也有用資料庫儲存資料,而應用程式被攻擊的一個常見漏洞是 SQL Injection。SQL Injection 是使用者輸入的資料中夾帶 SQL 指令,在設計不良的程式忽略了檢查,這些夾帶進去的指令就會被資料庫伺服器誤認為是正常的SQL指令而執行,因此招致到破壞。以下是 15 個免費的 SQL Injection Scanners:

    -- SQLIer
    -- SQLbftools
    -- SQL Injection Brute-forcer
    -- SQLBrute
    -- BobCat
    -- SQLMap
    -- Absinthe
    -- SQL Injection Pen-testing Tool
    -- SQID
    -- Blind SQL Injection Perl Tool
    -- SQL Power Injection
    -- FJ-Injector Framwork
    -- SQLNinja
    -- Automagic SQL Injector
    -- NGSS SQL Injector


  • 兩本投資好書

    Posted on May 21st, 2007 Sam Tang 3 comments

    在本月初以 $18.88 入了招行後,覺得現有沒有什麼股票好買,很多優質股的升幅實在不少,趁現在打好基本功,做好準備等待入市機會。最近三聯書店八五折減價,買了兩本投資方面的書,覺得兩本也很實用:

    智慧型股票投資人
    智慧型股票投資人
    巴菲特核心投資法
    巴菲特核心投資法

  • 無法存取 php.ini 下更改其設定值

    Posted on May 20th, 2007 Sam Tang 3 comments

    php.ini 內有很多設定值,如果無法更法 php.ini 而需要更改某些設定值的話,可以透過 PHP 程式或 .htaccess 來實現。

    PHP

    PHP:
    1. <? ini_set("magic_quotes_gpc", "1"); ?>

    以上程式碼會開啟 magic_quotes_gpc。

    .htaccess
    用 .htaccess 來實現更加方便,因為整個目錄內也會生效,在 .htaccess 加入:

    php_value magic_quotes_gpc 1

    以上使用了 php_value 來設定 magic_quotes_gpc,並定義它的值為 1 (即開啟)。

    這個方法是有限制的,例如 safe_mode 及 safe_mode_exec_dir 這類 functions 就不可以修改了。


  • PHP: 追蹤上傳檔案進度

    Posted on May 20th, 2007 Sam Tang No comments

    現時用 PHP 編寫上傳檔案的功能時,如果檔案體積較龐大,或者使用者與伺服器端的連線較慢,這樣上傳便要等一段頗長的時間,而且最慘是使用者根本不知還要等多久,以及已經上傳進度完成了多少。幸好在 PHP 5.2 支援檢查檔案上傳進度的功能,可以給使用者看到實時上傳進度。這篇在 IBM DeveloperWorks 的文章介紹了用 $_POST 陣及 APC_UPLOAD_PROGRESS 製作上傳實時進度的方法:

    What's new in PHP V5.2, Part 5: Tracking file upload progress


  • 用 PHP 擷取遠端網頁資訊

    Posted on May 8th, 2007 Sam Tang 3 comments

    以下程式碼會介紹如何擷取遠端網頁資訊,包括 HTML tag 裡面的 Title, Description 及 Keywords:

    PHP:
    1. <?php
    2. //----- 定義要擷取的網頁地址
    3. $url = "http://web-address";
    4.  
    5. //----- 讀取網頁源始碼
    6. $fp = file_get_contents($url);
    7.  
    8. //----- 擷取 title 資訊
    9. preg_match("/<title>(.*)<\/title>/s", $fp, $match);
    10. $title = $match[1];
    11.  
    12. //----- 擷取 Description 及 Keywords
    13. $metatag = get_meta_tags($url);
    14. $description = $metatag["description"];
    15. $keywords = $metatag["keywords"];
    16.  
    17. //----- 印出結果
    18. echo "URL: $url\n";
    19. echo "Title: $title\n";
    20. echo "Description: $description\n";
    21. echo "Keywords: $keywords\n";
    22. ?>


  • PHP 的 "Header already sent" 錯誤

    Posted on May 6th, 2007 Sam Tang 2 comments

    使用 header() 可以向 browser 發出 header 資訊,可以實現轉址或強制 browser 不要將頁面快取等。很多學習 PHP 的朋友也會遇過 "Header already sent" 錯誤,這個錯誤在使用 header() 或 session_start() 這類 functions 時,如果之前輸出過任何內容便會產生,即使是 html tag, 空字串或者空行也會一樣。例如:

    PHP:
    1. <?php
    2. ?>
    3. <html>

    以上語句沒有問題,但如果改用以下方式表達便會出現錯誤:

    PHP:
    1. <HTML>
    2. <?php
    3. ?>

    以上問題的其中一個解決方法是在使用 session_start() 前加入 ob_start();


  • Ubuntu 安裝 Java Runtime Environment

    Posted on May 6th, 2007 Sam Tang No comments

    以下是在 Ubuntu 安裝 Java Runtime Environment (JRE) 及 Firefox plug-in 的方法。

    首先開啟 terminal,輸入以下指令:

    sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts

    當完成下載及安裝程序後,會出現一個 Sun 的版權,同意便按 Enter 繼續,而 JRE 也會完成安裝。

    最後測試是否安裝好 JRE,開啟 telminal,輸入 "java-version",如果安裝正確會輸出 Java 的版本。至於 Firefox 方面,開啟 Firefox 並在網址列輸入 "about:plugins",這樣 Firefox 便會列出已安裝的 plug-in。


  • 巴郡否決出售中石油

    Posted on May 6th, 2007 Sam Tang No comments

    美國投資公司巴郡在周六的股東大會上,以大比數否決出售中石油,結果為 811,479 票對 15,245 票否決動議。其實這個結果已經在意料之內,巴菲特早已表明無意出售中石油的股票。再加上剛發現的大油田,令中石油在周五狂升 14%,這也是巴菲特向股東說明的一個重要理據。

    我在三月以 $8.7 買入中石油,原本目標今年內連同股息有 15% 回報,想不到現在已超額完成。有巴郡不出售中石油的利好消息,星期一中石油應該也會有得升,但我不會在現階段追入,機會經常都會出現,只要做好準備,總會有入平貨的機會。

    上個月把招商銀行 (3968) 納入投資組合,同時現在也多儲點現金,留待跌市機會。


  • Dell 推出預載 Ubuntu PC

    Posted on May 3rd, 2007 Sam Tang No comments

    對於 Linux 及 Open Source 的支持者來說是一個大喜訊,終於有廠機預載 Linux 代替 Windows Vista/XP。Dell 宣佈未來幾周會在美國推出的 PC 預載 Ubuntu 7.04,而消費者也可以選購 Ubuntu 維護商 Canoncial 的支援服務。

    無疑 Dell 踏出的第一步對 Linux 在桌面市場非常重要,而且更加確立了 Ubuntu Linux 在桌面 Linux 的領導地位。希望這個勢頭不要停止,以及可以盡快買到預載中文版 Linux 的 PC。