PHP: (dbm型の)データベース・アブストラクション レイヤー関数 - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<ctype_xdigitdba_close>
view the version of this page
Last updated: Tue, 21 Dec 2004

XVIII. (dbm型の)データベース・アブストラクション レイヤー関数

導入

これらの関数は、Berkeley DB 型データベースへのアクセス用の基本関数を 構成します。

これらの関数は、複数のファイルベースのデータベース用のアブストラクション ・レイヤーです。その機能は、サポートのような近代的なデータベースの機能の サブセットに制限されています。(IBMのソフトウエアDB2と混同しないで 下さい。このデータベースは、ODBC 関数 を通じてサポートされます。)

要件

各機能の動作は、使用するデータベースの実装に依存します。 dba_optimize() および dba_sync() の ような関数は、特定のデータベースでは動作しますが、他のデータベース では機能しません。サポートされるdbaハンドラをダウンロードし、イン ストールする必要があります。

表 1. DBAハンドラのリスト

ハンドラ注意
dbm dbm は最も古い(元祖の)Berkeley DB 型データベースです。可能なら ば使用しない方が良いでしょう。DB2およびgdbmに組み込まれている互 換性を保つための関数は、サポートされません。これは、実装されて いるのがソースレベルの互換性のみであり、元のdbmフォーマットを処 理することができないためです。
ndbm ndbm は、より新型であり、dbmよりも柔軟です。 dbm固有の制約の多くをまだ有しています。(そのため、古い実装です。)
gdbm gdbmは、です。
db2 DB2 は、 です。これは、「スタンドアローンおよびクライアント/サーバー アプリケーションの両方で高性能な組込みデータベースサポートを提供する プログラム用ツールキット」として記述されています。
db3 DB3 は、です。
db4 DB4 は、です。これは、PHP 4.4.0以降で利用可能です。
cdb cdbは、固定データベースの作成・読込み用の高速で高信頼性の軽量型 パッケージです。これは、qmailの作者によるものであり、にあります。固定であるため、読込 み操作のみがサポートされます。 PHP 4.3.0以降、内部的なcdbライブラリにより(更新ではなく)書き 込みがサポートされています。
cdb_make PHP 4.3.0以降、付属するcdbライブラリを使用する場合にcdbファ イルの(更新ではなく)作成をサポートします。
flatfile これは、PHP 4.3.0以降で利用可能で、古い dbm 拡張モジュールとの互換性 のためのものであり、使用するべきではありません。 しかし、ファイルがこの形式で作成された場所でこれを使用するこ とができます。これは、configureが外部ライブラリを見付けるこ とができない場合に生じます。

dba_open()またはdba_popen() 関数を実行する際、引数にハンドラ名の一つを指定する必要があります。 実際に利用可能なハンドラのリストは、 phpinfo() または dba_handlers()をコールした際に表示されます。

インストール手順

設定オプション--enable-dba=shared を使用することにより、dbm形式のデータベースをサポートする動的にロー ド可能なモジュールを有効にしてPHPを構築することができます。 また、PHPのconfigure行に設定スイッチ --with-XXXX を指定することにより、少なくとも以下のハンドラの一つのサポートを追加 する必要があります。

表 2. サポートされるDBAハンドラ

ハンドラconfigureのスイッチ
dbm dbmのサポートを有効にするには、 --with-dbm[=DIR]を追加します。
ndbm ndbmのサポートを有効にするには、 --with-ndbm[=DIR]を追加します。
gdbm gdbmのサポートを有効にするには、 --with-gdbm[=DIR]を追加します。
db2 db2のサポートを有効にするには、 --with-db2[=DIR]を追加します。

注意: db2はdb3およびdb4とコンフリクトします。

db3 db3のサポートを有効にするには、 --with-db3[=DIR]を追加します。

注意: db3はdb2およびdb4とコンフリクトします。

db4 db4のサポートを有効にするには、 --with-db4[=DIR]を追加します。

注意: db4はdb2およびdb3とコンフリクトします。

注意: これは、PHP 5.0.0で追加されました。これ以前のバージョンでは、 --with-db3=DIRを使用し、 DIRにdb4ライブラリのパスを指定する必要する必要があります。 バージョン4.3.0より前のPHPでは、4.1以降のバージョンのdbを使用 することはできません。

cdb cdbのサポートを有効にするには、 --with-cdb[=DIR]を追加します。

注意: PHP 4.3.0以降、付属するcdbライブラリを使用するためにDIRを省略 することができます。この場合、cdb_makeハンドラが追加され、 cdbファイルを作成し、PHPのストリームを用いてネットワーク上の cdbファイルにアクセスできるようになります。

flatfile flatfileのサポートを有効にするには、 --with-flatfileを追加します。

注意: これは、古いdbm拡張モジュール との互換性のためにPHP 4.3.0で追加されました。 このハンドラは、他のハンドラで必要とされるライブラリの1つを インストールすることができない場合、そしれ、付属するcdbハンド ラを使用することができない場合にのみ使用して下さい。

注意: PHP 4.3.0までは、db2およびdb3ハンドラの両方を追加することができま したが、内部的に使用できるのは片方だけでした。 これは、両方のファイル形式を使用することができないことを意味します。 PHP 5.0.0以降、このような設定ミスを回避するよう設定の確認が行われます。

実行用の設定

この拡張モジュールは設定ディレクティブを全く定義しません。

リソース型

関数 dba_open() および dba_popen() は、指定したデータベースファイルを アクセスするためのハンドルを返します。このハンドルは、他の全ての dba関数コールで使用されます。

定義済みの定数

この拡張モジュールは定数を全く定義しません。

例 1. DBAの例

<?php

$id
= dba_open ("/tmp/test.db", "n", "db2");

if (!
$id) {
   echo
"dba_open failed\n";
   exit;
}

dba_replace ("key", "This is an example!", $id);

if (
dba_exists ("key", $id)) {
   echo
dba_fetch ("key", $id);
  
dba_delete ("key", $id);
}

dba_close ($id);
?>

DBAは、バイナリセーフでありいかなる制限も受けません。 DBA は、使用するデータベースの実装による全ての制約を継承します。

全てのファイルベースのデータベースは、完全に使用可能なものについて 新規に作成されたデータベースのファイルモードを設定する手段を、 提供する必要があります。 ファイルモードは、通常 dba_open() または dba_popen() に4番目の引数として渡されます。

dba_firstkey() および dba_nextkey()関数を用いて連続的に全てのエント リにアクセスすることができます。アクセスする際にデータベースを変 更できない可能性があります。

例 2. データベースへの連続アクセス

<?php

# ...データベースをオープンする...

$key = dba_firstkey ($id);
    
while (
$key != false) {
   if (...) {
# 他の操作を後で行うためにキーを記憶する
      
$handle_later[] = $key;
   }
  
$key = dba_nextkey ($id);
}

for (
$i = 0; $i < count($handle_later); $i++)
  
dba_delete ($handle_later[$i], $id);

?>

目次
dba_close -- データベースを閉じる
dba_delete -- キーが指すエントリを削除する
dba_exists -- キーが存在するかどうかを確認する
dba_fetch -- キーが指すデータを取得する
dba_firstkey -- 最初のキーを取得する
dba_handlers -- 利用可能なハンドラの一覧を得る
dba_insert -- エントリを挿入する
dba_key_split -- Splits a key in string representation into array representation
dba_list -- オープンされているデータベースファイルを全リストを得る
dba_nextkey -- 次のキーを取得する
dba_open -- データベースをオープンする
dba_optimize -- データベースを最適化する
dba_popen -- データベースを持続的にオープンする
dba_replace -- エントリを置換または挿入する
dba_sync -- データベースを同期する


add a note add a note User Contributed Notes
(dbm型の)データベース・アブストラクション レイヤー関数
jason
21-Dec-2004 03:33
Don't make the dumb mistake I did, if you copy the first example at the top and modify it for test, the dba_open specifies "n" which will truncate the database that you are pointing to. Make sure you change it to "r" if you just want to read from an existing dbm file.
kevinphpdotnet at stormtide dot ca
17-Mar-2004 07:10
When using db4 on redhat 7.3 you may get signal 11s on the apache child processes. The installation test scripts will report that db4 is working correctly as the cli will not sig 11 out. The solution is to check to see if mod_rewrite is installed with apache, if it is either dereference it from libdb.so.3 or build apache without mod rewrite. Once this is done you will no longer have your child processes dying out and db4 will work. If you do not get a sig 11 after dba_open just ignore this comment.
djm at web dot us dot uu dot net
17-Oct-1999 10:28
With db2, you need to call dba_sync() to get the data written to disk; the examples are missing this.  db2 uses
the BTREE file format, not the more common HASH.
BTREE is faster, though, in my tests, so it's a good
choice.

<ctype_xdigitdba_close>
 Last updated: Tue, 21 Dec 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: /
Last updated: Mon Mar 14 08:13:06 2005 Local time zone must be set--see zic manual page