3 月 052005
 

讓 FreeBSD 下的 PHP DBA extension 能支援 ‘dbm’ handler

在 FreeBSD 上面開發了一些程式,使用到 DBOPEN(3) 這個函數來處理一些 hash..

原本 PHP 有支援 DBM extension 可以讀取這些 db,不過新版的 PHP 已經不支援 DBM extension 了,改用 DBA extension 配合 ‘dbm’ handler 來存取這些 db

然而在 FreeBSD 下,使用 ports 去安裝的新版 PHP,其中的 DBA extension 卻無法支援 ‘dbm’ handler..

當然,如果可以的話改用 ‘db4’ handler 可能是比較好的,不過由於歷史因素難解.. 所以就只好自己跳下去改程式,讓 PHP 在安裝時能夠利用 DBOPEN(3) 來提供 ‘dbm’ handler

DBM 事實上只是一個 API,其所產生的 db 檔案格式在各種系統下可能不相容,而且利用不同方式提供的 DBM handler 所產生的 db 檔案格式也可能不一樣..

這個 patch 我有回送給 PHP 開發小組,據說 PHP 5.1 已經恢復支援 DBM handler 了,不過我還沒空去測試

有了這個 patch,你就可以使用 PHP 來存取 FreeBSD 的一些系統 db 檔案了,例如 /etc/mail/aliases.db

$id = dba_open("/etc/mail/aliases.db", "r", "dbm");
$root_alias = dba_fetch( "root\0", $id );

另外,這個 patch 使用 HASH(3) 當作內部的資料格式,因此如果用 C 寫程式,記得第四個參數要使用 DB_HASH ,例如:

db = dbopen("/tmp/test.db", O_RDWR, 0644, DB_HASH, NULL);

其他詳細資訊請參考: http://www.csie.nctu.edu.tw/~cdsheen/codings/freebsd-phpdbm-patch.php

 Posted by at 12:10

歡迎留下您的意見