Recent Articles / Archives

HP 電腦將會預載 Yahoo 服務

Yahoo 跟 Hewlett-Packard (HP) 簽訂協議,HP 將會在歐、美地區出售的桌面型及手提電腦預載 Yahoo 服務,包括 HP 會安裝一個有 Yahoo 及 HP 品牌的 toolbar、在 Internet Explorer 7 的首頁設成 Yahoo 及將 Yahoo 定為預設搜索引擎。

但像我這類消費者會較為反感,因為我很不喜歡新買回來的電腦預先替我做個性化設定及安裝軟件,這等如逼使我用一些我不喜歡的産品。而從 Yahoo 及 HP 的角度來看當然對雙方都有好處,Yahoo 無疑可以增加市場佔有率,而 HP 在這宗交易應該收了 Yahoo 足夠的銀票了吧。

September 30, 2006 · 互聯網筆記, PC 筆記 · No Comments Yet

PHP + Akismet 過濾 Comment Spam

WordPress 內建 Akismet 這個 plugin 過濾 spam,我啟動了這個 plugin 後發覺 spams 都數量減少了很多。而 Akismet 也可以用在自行開發的程式上,個人使用是免費的,商業使用才需付費。

Akismet 提供了完整的 API documentation,但其實已經有很多熱心的 developers,將現成 Libraries 及 plugins 放到 Akismet Development Page,我將會示範使用 PHP 4 class by Bret Kuhns,首先下載 PHP4 Akismet Class,解壓後將 Akismet.class.php 上載到 web server。

以下是 coding 的步份:

CODE:
  1. <?php
  2. include ('Akismet.class.php');
  3.  
  4. // 建立物件,並送出 URL 及 API key
  5. $akismet = new Akismet('http://www.real-blog.com', '[YOUR API KEY]');
  6.  
  7. // $author 是作者名稱
  8. $akismet->setCommentAuthor($author);
  9. // $author_email 是作者電郵
  10. $akismet->setCommentAuthorEmail($author_email);
  11. // $author_url 是作者網站
  12. $akismet->setCommentAuthorURL($author_url);
  13. // $comment 是回應內容
  14. $akismet->setCommentContent($comment);
  15. $akismet->setPermalink('http://www.example.com/blog/alex/someurl/');
  16.  
  17. if($akismet->isCommentSpam()) {
  18.     echo "這是 Spam";
  19. } else {
  20.     echo "這不是 Spam";
  21. }
  22. ?>

September 29, 2006 · 程式設計分享 · Comments (1)

Intel 快將推出 Quad Core CPU

在三藩市舉行的 Intel Developer Forum (IDF) 上,Intel 表示本年十一月將會推出第一粒個人電腦專用的 4 核心處理器,其效能將會比現時的雙核心處理器提升 50% 以上的效能。

另外,現時 Intel 的處理器是使用 65nm 製程,他們預期 2007 年中所推出的 4 核心處理器會使用 45nm 製程,使到可容納的核心數量得以提高。

反正現在不是買新機的時機,要買最起碼多等幾個月 Vista 推出,而且我習慣新 OS 推出後大概半年至一年才會升級,所以 45nm 製程的 Quad Core 應該是不錯的選擇。唯一使我擔心的是過熱的問題,希望 Intel 不會重滔 P4 的覆轍。

September 28, 2006 · 電腦硬件產品 · Comments (2)

換了技嘉 G-Power Lite 散熱器

昨天回家後發覺電腦開了不久便當機,進去 BIOS 看看原來 CPU 風扇沒有轉,試過主機板的 4-pin 接頭供電沒問題後,便確定是 CPU 風扇壞了。

最後買了技嘉 G-Power Lite 散熱器,在買回來後,就拆下舊風扇及清理好 CPU DIE 上面的舊散熱膏,抹乾淨及塗上散熱膏安裝。說來簡單,但實際上也搞了很久,因為我是用 LGA 775,安裝時要拆下主機板才能上底座,而且那兩個扣具安裝真的很麻煩。

如果扣除安裝麻煩,G-Power Lite 也是不錯的,希望技嘉可以改善這點。

September 28, 2006 · PC 筆記 · No Comments Yet

限制用戶使用 crontab

基於安全問題,在 Linux 下可以限制用戶使用 crontab 排程,而要設定的檔案分別有 /etc/cron.allow 及 /etc/cron.deny,它們的定義分別是:

/etc/cron.allow
如果 /etc/cron.allow 存在,只有這個檔案內的使用者才可使用 crontab。

/etc/cron.deny
在 /etc/cron.deny 內的使用者不可使用 crontab,未記錄的使用者才可以使用 crontab。

在使用時只會選擇以上其一個設定檔來限制,其中以 /etc/cron.allow 比 /etc/cron.deny 優先。而寫入的格式必須是每一個使用者一行。

另一點要注意的是,不管 root 是否在以上檔案內,都可以使用 crontab。

September 26, 2006 · Linux / BSD 筆記 · No Comments Yet


用 PHP 建立 ZIP 壓縮檔

要用 PHP 建立壓縮檔,除了在 PHP 執行 UNIX command 外,還可以單靠 PHP 完成,最簡單的方法是用 PEAR 函式庫來做,其中 PEAR::Archive_Zip 就可以用作建立 ZIP 壓縮檔。

以下先來看看 PEAR::Archive_Zip 的使用方法。

CODE:
  1. <?php
  2. include ("pear/archive_zip.php");
  3.  
  4. // 建立 Archive_Zip 物件,及定義檔案名稱
  5. $zipfile = New Archive_Zip("zipfile.zip");
  6.  
  7. // 加入壓縮檔的檔案及目錄陣列
  8. $file_list = array("file1.txt");
  9.  
  10. // 建立 zip 檔案
  11. $zipfile->create($file_list);
  12.  
  13. echo "檔案檔 zipfile.zip 建立成功。";
  14. ?>

以上程式會建立 zipfile.zip 壓縮檔,裡面會有包含有 file1.txt 檔案。在使用時請留意儲存壓縮檔的目錄要有寫入的權限。

September 24, 2006 · 程式設計分享 · Comments (6)

節約用電其實很簡單

上個月開始真的想想自己的用電習慣,發覺自己真的很浪費用電,現在的用電量少很多,但生活也沒有受到影響。例如晚間想都不想便開冷氣,現在會天氣熱才開,而且開冷氣時將溫度調較高一點,再配合風扇會更省電。

另外一個較浪費的地方是電視,很多時不論電目是否好看也會開電視,感覺有點聲氣。現在要看才開,不看就關上,其實寧靜的環境比「有聲氣」更舒服。

我以前最大的問題是貪方便,以及覺得只要自己付得起電費就算了。實際上地球的資源不屬於任何一個人,要大家一同珍惜,我們的下一代才會有較舒適的生活。

September 23, 2006 · 生活隨筆 · Comments (1)

選擇了 Inesoft Cash Organizer

一直使用微軟所提供的免費 PPC 理財軟件 Microsoft Money 2005 for Windows Mobile,但後來覺得功能較簡單,在網上找了幾款 Pocket PC 的理財軟件,最後選擇在 Inesoft Cash OrganizerSpb Finance 兩者之間作出取捨。兩款軟件售價一樣是 $24.95 美元,所以只要選擇一個使用上較順手及功能齊全的。

經過兩個多星期的試用後,Inesoft Cash Organizer 較適合我的需要,而且開啟速度也較快速。今天買了 Inesoft Cash Organizer ' 05 Premium,這套也是我第一套付錢購買的 Pocket PC 軟件。

September 22, 2006 · Pocket PC · Comments (2)

解決 PHP Spam 問題

如果主機上寄存了一個以上網站,網站執行 PHP 一律會用 nobody 或 apache 身份,那麼當有人用 PHP 發送 Spam 的話,要找出是那一個網站很麻煩。

而且很多時不是網站持有人發送,而是 PHP 程式本身設計有問題,讓 spammers 可以利用一般的 form to mail 程式發送,在 Preventing spam when using PHP's mail function 有詳細說明。

今天寫了一個 perl script,取名為 /usr/sbin/sendmail,並將原本的 /usr/sbin/sendmail 移到別處。當有人用 PHP 發送郵件時便可以用那個 perl script 記錄是那一個目錄,並寫入記錄檔。總算解決了一直困擾著自己的問題,下次遇到同樣問題就輕鬆得多了。

September 21, 2006 · 工作日誌 · Comments (2)

網頁伺服器 — 雷電 HTTPD

在 Windows 系統下很多人也會用 IIS 作為網頁伺服器,今天為大家介紹一套功能不錯的網頁伺服器 -- 雷電 HTTPD。為何不用 IIS 及 Apache,而要去用一套付費軟件呢? 有兩個主要原因:

-- 全中文化設計,簡單網頁式圖形設定介面,不用死背指令。
-- 軟件輕巧的設計,只佔用極少系統資料,不用購買高配備的伺服器。
-- 雷電 HTTPD 除了支援靜態網頁,還支援 PHP, PERL CGI 及 PYTHON。
-- 而在安全性方面也支援 SSL,及定期安全性更新服務。

雷電系統還不止雷電 HTTPD,還有 FTP, DNS 及 Email 伺服器。我較喜歡雷電 MAILD,全程有圖形介面輔助,而且已經內建了 Webmail 功能。要知道在 Windows 下的郵件伺服器一點也不便宜,它的售價一點也不貴。

所以如果你不想學用 Linux 的架站,只想輕輕鬆鬆用 Windows 架設簡單易用及高效的伺服器,又或者在中小企內架設自家的伺服器,可以考慮購買雷電系列的產品。

雷電 HTTPD
雷電MAILD

September 21, 2006 · 實用軟件推薦 · No Comments Yet


PHP 加密在資料庫的密碼

當用戶數量比較多時,用資料庫儲存用戶名稱及密碼是很好的選擇,但如果直接將用戶的密碼儲存在資料庫,即使資料庫要密碼才可以登入也有安全性的問題。例如系統管理員或者 Web Hosting 的員工便可以看到用戶的密碼,所以先將用戶密碼加密是必要的步驟。

PHP 內建了 MD5() 單向加密演算法,即只可加密,而不可以反向解密,以下是利用 MD5() 函式的具體方法:

這裡是將用戶密碼用 MD5() 加密後加插入資料庫:

CODE:
  1. <?php
  2. $db_conn = mysql_connect("host", "db_user", "db_pass");
  3. mysql_select_db("db_name", $db_conn);
  4.  
  5. // 插入資料表的 $password 用了 md5 加密
  6. mysql_query("insert into users values
  7.                         ('$username', '".md5($password)."')");
  8. ?>

檢查用戶名稱及密碼:

CODE:
  1. <?php
  2. $db_conn = mysql_connect("host", "db_user", "db_pass");
  3. mysql_select_db("db_name", $db_conn);
  4.  
  5. $sql = mysql_query("select * from users where
  6.                         `username`='$username' and
  7.                         `password`='".md5($password)."'");
  8.  
  9. if (mysql_num_rows($sql) > 0) {
  10.     // 用戶名稱及密碼正確
  11. } else {
  12.     // 用戶名稱及密碼錯誤
  13.     exit();
  14. }
  15. ?>

用以上方法寫出來的登入系統,只用用戶是知道自己的密碼,系統管理員最多只能夠修改密碼,而不能看到源始密碼是什麼。

September 19, 2006 · 程式設計分享 · Comments (5)

我的 Blog 原來很值錢

這個工具是計算一個 Blog 的價值,並以銀碼來顯示。至於如何計算這個問題,根據作者的介紹,計算是基於每條通往網誌的連結。

而本網誌的價值竟是 $28,227 (應該是美元吧),但這個數字拿來看看開心一下便算了,個人認為沒什麼參考價值。


My blog is worth $28,227.00.
How much is your blog worth?

September 19, 2006 · 生活隨筆 · No Comments Yet

Redhat 快速加入多個 IP

一般的情況下如果要在 Redhat 系統上加入 IP,可以在 /etc/sysconfig/network-scripts/ 下建立類似 ifcfg-eth0:x 檔案,例如:

DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
NETWORK=192.168.1.1
BROADCAST=192.168.0.255
TYPE=Ethernet

如果加入一兩個 IP 別名的話用這個方法沒有問題,但如果要加入大量 IP,例如 100 個的話,這個方法就會十分麻煩。另一個方法可以將一個連線的 IP range 加入到系統內,方法如下:

1. 建立 /etc/sysconfig/network-scripts/ifcfg-eth0-range0
2. 加入以下內容在 ifcfg-eth0-range0 裡面:

IPADDR_START=192.168.1.100
IPADDR_END=192.168.1.200
CLONENUM_START=0

以上內容會加入由 IPADDR_START(192.168.1.100) 至 IPADDR_END (192.168.1.200) 這個 IP range,而 CLONENUM_START 的數值就是定義給第一個 IP 別名的網絡卡,以上例子是對應 eth0:0。

要注意的是盡量不要遠端做這個動作,因為改錯了也可以馬上修正。

如果要加入多個 IP range 的話,只要順序建立 ifcfg-eth0-range1, ifcfg-eth0-range1 ...... 修改後重新啟動網絡便完成了:

service network restart

September 18, 2006 · Linux / BSD 筆記 · No Comments Yet

Register Globals 不安全的原因

很多 PHP 初學者也會遇到 Register Globals 的問題,而程式是基於開啟 Register Globals 的 PHP 開發的話,會有安全性的問題,所以不建議開啟,至於有問題的原因,先看以下程式碼:

CODE:
  1. <?php
  2. if($username == "admin" && $password == "passwd"){
  3.     $valid  = true;
  4. }
  5.  
  6. if($valid){
  7.     // print something to valid user
  8. }
  9. ?>

以上程式碼是先檢查用戶名稱及密碼,如果正確就定義 $valid 變數為 true,但如果有人在網址列的最後加上 ?valid=1,那麼即使沒有輸入密碼也可以通過。

而關閉了 register_globals 的話,所有用戶輸入的變數也會用 $_POST, $_GET 及 $COOKIE 等陣列,所以如果在網址列加入 ?valid=1 的話,所傳入的變數只是 $_GET['valid'],而不是 $valid。

當然以上例子的問題可以在最開始的部份加一行 @unset($valid) 解決,但只要關閉 register_globals 就可以完全解決問題。PHP 的官方網站還有一篇關於 register_globals 的安全文章,裡面有更詳細的介紹:

September 18, 2006 · 程式設計分享 · Comments (1)

PHP4, PHP5 or PHP6?

PHP5 也推出一段時間,但仍有不少伺服器還是使用 PHP4,原因是 PHP5 升級不像 PHP4 相容性那麼好。以前當 PHP3 升級到 PHP4 時,大多數情況下程式碼幾乎完全不用改,也可將原來的 PHP3 程式放到安裝 PHP4 的伺服器上。

但現在可不是這樣,一些較大型的系統如果是基於 PHP4 開發,放到 PHP5 上面多數會産生錯誤。這也是大多數 web hosting 還沒有轉用 PHP5 的原因。而當 PHP5 還未完全普及時,PHP 開發小組已經為 PHP 6.0 的開發作準備,有很多原本就不應該有的功能現在將會移除,這個當然是好,最起碼不用很多 PHP 初學者給 register_globals 等問題誤導,以下是 PHP 6.0 應該會作的改變:

-- register_globals, safe_mode 及 magic_quotes 等選擇會完全移除。
-- ereg 會移除,而 XMLReader, XMLWriter 及 Fileinfo 會預設加入。
-- 錯誤回報機制預設會由現在的 E_STRICT 轉到 E_ALL。
-- ASP 的 <% 標簽不會被支援。

至於到時會否升級這個問題,我想自己在家中試用沒問題,但公司使用的話便要看情況了。現在如果要一台伺服器同時安裝兩個版本 PHP 會很麻煩,如果 PHP 的開發小組可以照顧用戶這方面的需要,想必升級的用戶會更多。

September 17, 2006 · 程式設計分享 · No Comments Yet


  Next Page »