[PHP-users 11049] Re: db3について

Youichi Iwakiri php-users@php.gr.jp
Wed, 23 Oct 2002 13:08:11 +0900


いわきりです

GT wrote in <B9DB71BD.B41B%perl@getpresent.com> :
>DBM形式のデータベースを使いたいのですが
>下記のコードだとエラーになってしまいます。
>なぜなのか教えてください。
>$DB = dba_open($datafile, "n", "db3") or die("xxx");
>dba_close($DB);
>エラーメッセージ
>Warning: no such handler: db3 in /xxx/xxx/test.php on line 27

configureで--with-db3オプションを指定せずに
構築されたdbaモジュールだからでしょう。

>また、これはPHPがインストールしていれば
>必ず使えるというわけではないのでしょうか?

configureで特にDBを指定しない場合は、
mysqlが利用できるだけで、他のDBは有効になりません。
また、DBM形式のDBを利用するためには、
使用する個々のDBMを有効にするオプションを指定して構築されていなければ
なりません。

phpinfo()で確認して見てください。
+-------------------+-----------------------+
|DBA Support        | Enabled               |
+-------------------+-----------------------+
|Supported handlers | gdbm ndbm db2 db3 ... |
+-------------------+-----------------------+

上記の様にSupported handlersにdb3が無ければ利用できません。

>また、ある書籍には下記のように書いてあるのですが
>$DB = dbmopen($datafile, "n") or die("xxx");
>dbmclose($DB);
>これは
>$DB = dba_open($datafile, "n", "dbm") or die("xxx");
>dba_close($DB);
>とは違うのでしょうか?

結論から言えば、違います。
構築時にgdbmまたはndbmを検出し、それに合わせた
dbmopen関数が提供されます。
XX DBM関数は、deprecatedな位置づけですので
XVII (dbm型の)データベース・アブストラクション レイヤー関数
を使った方が良いです。

-- 
Youichi Iwakiri