2006/12/23

再戰nLite

話說上禮拜寫程式時,本來要裝pgSQL來測試的,沒想到上次我用nLite刪的過火了,缺少某個Service沒辦法裝。
還好手邊有未改過的光碟,這次的重點就在「不刪」的前提下製作新的安裝光碟,順便打上Hotfix。
目前我在網路上找到已經有人整理好的Hotfix Pack有三個,詳細的比較請看這裡:
XP Update Packs - Purposes and Differences Explained!


我個人選擇的是:Boooggy's pack
理由是比較完整一些。

這些Hotfix Pack每個月都會更新一次,所以要作光碟時再去下在就行了。
裝完後再把IE7、WMP11、.NET3以及驅動程式裝一裝再設定一下就差不多了。
打了補丁後的好處是有一些修正檔例如:多核的補丁,就不用再更新了~

2006/12/13

PHP 類別內變數的修飾詞

太久沒寫程式了,對於 public, protected, private 這三個修飾詞的範圍有些忘了,除錯了一個下午。
存取範圍可以看下表:
 外部子類別
public可可
protected否可
private否否

2006/12/12

XCache 1.2 Release

其實這東西在2006.12.10就放出來了,不過當時我沒仔細看,直到昨天我才發現。
最近XCache的腳步很快,比EA快很多,尤其是他的Source和Binary是同步放出來的,未來我應該會追XCache來更新。
這一版的特色是對於PHP 5.2作完全的支援,也和suhosin/ZendOptimizer相容。
由於FreeBSD會把suhosin編進去,所以這方面的相容性也蠻有用的。

PHP System Information 介紹

今天在網路上逛街的時候看到的:phpsysinfo
這是一個可以看(監控)系統資源的 PHP 程式,目前我只在 Windows 下試過,可以很順利的跑出來,不過花的時間有點長,大約是5~6秒左右。

2006/12/06

SimpleTest 初探

SImpleTest是一套用來作PHP程式測試的架構,雖然我很早就知道這東西,不過一直沒有用它。
最近開始在做自己用的程式庫,所以就用它來作自動測試。

架構上我希望測試用的程式碼跟程式庫本身分開,所以目錄我是這麼安排的:

├─[lib]
├─test
  ├─simpletest
  └─case

[lib]:程式庫目錄
test:測試用目錄
simpletest:SimpleTest的程式碼
case:測試程式集

在 test 底下有一個 index.php ,用來引入 case 底下所有的 .php 測試用的程式碼,
這裡假設[lib]的名稱叫做losttech,你可以根據你自己設定的目錄名稱更改,修改 define 那一行就對了。
index.php 內容如下:

<?php
mb_internal_encoding('UTF-8');
$目錄 = dirname(__FILE__);
define ('引用', $目錄 . '/../losttech/');
require_once $目錄 . '/simpletest/unit_tester.php';
require_once $目錄 . '/simpletest/collector.php';
require_once $目錄 . '/simpletest/reporter.php';

主程式();

function 主程式(){
    global $目錄;
    $測試 = &new GroupTest('測試報告');
    $測試->collect($目錄 . '/case/', new SimplePatternCollector());
    $測試->run(new HtmlReporter('UTF-8'));
    unset($測試);
}
?>

這裡有一個範例,我寫了一個函式叫做「字元陣列」,用途是把一個一串拆成一個一個的字元陣列。
我把它放到 losttech/string.php ,內容如下:

<?php
function 字元陣列($字串, $長度 = 1) {
    $輸出 = array();
    if ($長度 < 1) {
        return $輸出;
    }
    for ($索引 = 0; $索引 < mb_strlen($字串); $索引 += $長度) {
        $輸出[] = mb_substr($字串, $索引, $長度);
    }
    return $輸出;
}
?>

測試用的程式碼,我把它放到 test/case/string.php,這裡我故意讓它的檔名跟要引用的檔名相同。
內容如下:

<?php
require_once 引用 . 'class/' . basename(__FILE__);

class 測試:字元陣列 extends UnitTestCase {
    function testCreation(){
        $測試陣列 = array(
            '' => array(),
            '1' => array('1'),
            '一' => array('一'),
            '123' => array('1','2','3'),
            '一二三' => array('一','二','三'),
        );
        foreach($測試陣列 as $測試 => $結果) {
            $this->assertEqual($結果, 字元陣列($測試), "測試:$測試");
        }
    }
}
?>

測試結果:

測試報告

1/1 test cases complete: 5 passes, 0 fail

這裡有個重點,就是把要測試的程式碼放到以 test 開頭的成員函數(例如:testEmail, testLogin等等,總之必須是 test 開頭)裡面來,這樣才會進行自動測試。

2006/12/03

FTP 的 UTF8 問題

剛剛在我的機器上做了一些測試:
Server端
  • OS:FreeBSD
  • FileSystem:ufs2
  • FTP Server:ProFTPD / vsFTPd
Client端
  • OS:Windows XP
  • FileSystem:NTFS
  • FTP Client:FileZilla
如果要把含有中文檔名的資料上傳,那麼就必須在FileZilla中把
「Use UTF8 on server if available」這項設定設成「Force」
上述這項設定可以在 Site Manager 中的 Advenced... 找到。

另外一提的是,即便是我在NTFS下用 php 作檔案操作,中文檔名還是無法輕易的處理掉,必須要轉碼,所以我考慮不去處理中文檔名的問題。
會下這個決策的因素是,我看到PHP6似乎有誠意來處理這個問題,而且這個問題不處理也不會天崩地裂。

2006/12/01

安裝 Gentoo

最近開始在摸Gentoo這東西。
之前我一直是用FreeBSD,原因就是他的port系統,可以讓我偷懶。
不過最近我發現FreeBSD在make的時候會自動記憶make的參數,這讓我很感冒,所以趁著整理電腦的時候,拿一台機器來裝Gentoo玩玩看!

不過可惜的是,我對FreeBSD中毒太深,所以上手困難~
再加上Gentoo作一個系統太花時間,所以我玩了半天就放棄了。

可喜的事情是,上面提到的自動記憶,我可以先把 /var/db/ports 底下的檔案砍光,再用 portupgrade 來維護,所以算是解決一半的問題。