Recent Articles / Archives

開源磁碟加密軟件 — TrueCrypt

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

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

下載: TrueCrypt

PHP 編寫 BBCode 函式

現在一些主流的論壇或 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 函式已經大致上完成,你可以按照自己的需要加入各種語法,原理與以上的做法相同。

May 27, 2007 · 程式設計分享 · Comments (1)

升級到 Ubuntu 7.04

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 的開發團隊確實下了不少功夫,而新增的功能多數除了十分實用外,也主要為了迎合大眾使用者。

May 24, 2007 · Linux / BSD 筆記 · No Comments Yet

強制刪除檔案工具 — killBox

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

官方網站: killBox

May 23, 2007 · 實用軟件推薦 · Comments (6)

15 個免費 SQL Injection Scanners

現時很多網站應用程式也有用資料庫儲存資料,而應用程式被攻擊的一個常見漏洞是 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

May 22, 2007 · 程式設計分享 · No Comments Yet


兩本投資好書

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

智慧型股票投資人
智慧型股票投資人
巴菲特核心投資法
巴菲特核心投資法
May 21, 2007 · 精明消費 / 理財 · Comments (3)

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

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 就不可以修改了。

May 20, 2007 · 程式設計分享 · Comments (3)

PHP: 追蹤上傳檔案進度

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

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

May 20, 2007 · 程式設計分享 · No Comments Yet

用 PHP 擷取遠端網頁資訊

以下程式碼會介紹如何擷取遠端網頁資訊,包括 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. ?>

May 8, 2007 · 程式設計分享 · Comments (3)

PHP 的 "Header already sent" 錯誤

使用 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();

May 6, 2007 · 程式設計分享 · Comments (2)


Ubuntu 安裝 Java Runtime Environment

以下是在 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。

巴郡否決出售中石油

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

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

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

Dell 推出預載 Ubuntu PC

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

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