PHP マニュアル
前のページ |  | 次のページ

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

# 導入

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

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

# 要件

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

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

ハンドラ | 注意
--- | ---
dbm | dbm は最も古い(元祖の)Berkeley DB 型データベースです。可能なら ば使用しない方が良いでしょう。DB2およびgdbmに組み込まれている互 換性を保つための関数は、サポートされません。これは、実装されて いるのがソースレベルの互換性のみであり、元のdbmフォーマットを処 理することができないためです。
ndbm | ndbm は、より新型であり、dbmよりも柔軟です。 dbm固有の制約の多くをまだ有しています。(そのため、古い実装です。)
gdbm | gdbmは、GNUデータベースマネージャ です。
db2 | DB2 は、Sleepycat Software's DB2 です。これは、「スタンドアローンおよびクライアント/サーバー アプリケーションの両方で高性能な組込みデータベースサポートを提供する プログラム用ツールキット」として記述されています。
db3 | DB3 は、Sleepycat Softwareの DB3です。
db4 | DB4 は、Sleepycat Software's 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で追加されました。 このハンドラは、他のハンドラで必要とされるライブラリの１つを インストールすることができない場合、そしれ、付属する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); ?>`

前のページ | ホーム | 次のページ
ctype_xdigit | 上に戻る | dba_close