2006/12/26

幾個資料庫連線的參考資料

對啦,我是在重新造輪子沒錯,目前正在寫一個類似adodb的東西,開發平台是XP SP2+Apache 2.2+PHP 5.2。
目前只先處理連線的部份,其他的慢慢搞。
有些該紀錄的東西先記下來,這裡有一份資料庫預設的帳號密碼。
目前我裝過的一些資料庫的問題:
  • DB++:網站上找不到可下載的連結。
  • FrontBase:授權要填的表單太麻煩,我頭一次看到要求要填MAC的
  • Informix、Ingres:安裝過程失敗
  • MaxDB:只支援到 PHP 5.1.2
  • mSQL:網站上只提供Source,沒有預編好的Binary可下載。
  • Ovrimos SQL Server:網站掛了,無法下載
  • Sybase:他有很多產品線,我是拿SQL Anywhere 10 來看,只支援到 PHP 5.1.2;而ASE Express只提供Linux版可下載,沒有Windows版的,另外 PHP 內的 php_sybase_ct.dll 我沒辦法把他載入,聽說是缺少Runtime Libs

目前在php的函數中,有關資料庫(我個人的定義是可以吃SQL命令的)的介面函數大概分成四種:
  • 原生函數:DB++, Firebird, FrontBase, DB2, Informix, Ingres, MaxDB, Microsoft SQL Server, mSql, MySQL, Oracle,  Ovrimos SQL Server,  PostgreSQL, SQLite, Sybase
  • dbx:MySQL, ODBC, PostgreSQL, Microsoft SQL Server, FrontBase, Oracle, Sybase, SQLite
  • pdo:Firebird, Infomix, Microsoft SQL Server, MySQL, Oracle, ODBC, PostgreSQL, SQLite
  • odbc
目前我寫的這個確定會支援的:Firebird, DB2, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, SQLite,而MaxDB及SQL Anywhere等有支援PHP 5.2的extension後也會考慮加入支援,另外有空的話也會支援dbx、pdo、odbc,不過要慢慢弄。

2006/12/25

MS SQL Server 連線的作法

我是使用 SQL Server 2005 Express Edition 來作測試,有些地方要手動改。
  1. 下載 http://webzila.com/dll/1/ntwdblib.zip
  2. 解開得到 ntwdblib.dll ,把這個檔複製到 php 的安裝目錄,替換掉 php 內建的。

連線的範例:
mssql_connect ('(local)\SQLEXPRESS', 'sa', 'password');

或者用SQL Server組態管理員,把TCP/IP協定打開,重新啟動SQL Server後,也可以這樣:
mssql_connect ('127.0.0.1', 'sa', 'password');

phpPgAdmin的設定

今天把PgSQL 8.2裝到我的工作電腦(XP)裡面,順便裝上phpPgAdmin這個管理介面。
這個Web式的管理介面有點像是phpMyAdmin跟pgAdmin III的混合體,他完整的呈現了PgSQL比較複雜的一面。

要修改的是phpPgAdmin/conf/config.inc.php這個檔
找到
$conf['extra_login_security'] = true;
改成
$conf['extra_login_security'] = false;

這樣子就可以用在安裝時設定的帳號密碼來連線了。

2006/12/24

暴風影音與MPC

玩過不少Codec Pack,不過我個人目前還是比較喜歡暴風影音以及K-Lite Mega Pack這兩套。
由於目前並沒有轉檔或是製作影音檔的打算,純播放的話,暴風影音就夠了。
而暴風影音還附了一個調整程式,玩爛了很容易調整回來。

不過目前遇到一個奇怪的例子,在播放某個RM檔時會有問題,MPC直接就結束了,而KMPlayer可以很順利的播放。
後來我調整了MPC裡的設定:
View->Options->Player->Formats->File extensions->Real Media files
把他後面的Handle由DirectShow改成RealMedia就可以播放了。

另外,有時候在播放時會出現整片色塊暈開的現象,在我目前這台AP1000的機器上,只要在BIOS裡面把VGA的Share Memory開大一點就行了。(我這台上面可設定的範圍是16M~128M,我把他開到128M問題就解決了)

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 來維護,所以算是解決一半的問題。