分類彙整: 程式語言

PHP4 fsockopen() 無法使用 ssl:// 的 bug

PHP 4 有 bug 會導致 fsockopen 無法接受 “ssl://example.com”

即使有 OpenSSL support,還是會產生以下這樣的錯誤訊息:

Warning: fsockopen(): no SSL support in this build

PHP BUG #29934: http://bugs.php.net/bug.php?id=29934

解決方法有二:
1. Install PHP 5.x
2. FreeBSD, http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/72275

重裝系統時常常會忘記…. 搞了半天才發現之前就找過答案了.. 寫下來以免以後又忘了
建議若沒有特殊需求,儘量改用 PHP 5.x 吧..

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

讓 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