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

# XXIV. （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 よりも柔軟です。 dbm 固有の制約の多くをまだ有しています（そのため、 推奨されません）。
`gdbm` | Gdbm は、GNU データベースマネージャ です。
`db2` | DB2 は、Sleepycat Software's DB2 です。これは、「スタンドアローンおよびクライアント/サーバー アプリケーションの両方で高性能な組込みデータベースサポートを提供する プログラム用ツールキット」として記述されています。
`db3` | DB3 は、Sleepycat Software's DB3 です。
`db4` | DB4 は、Sleepycat Software's DB4 です。PHP 4.3.2 以降で利用可能です。
`cdb` | cdb は「固定データベースの作成・読込み用の、高速で高信頼性の 軽量型パッケージ」です。これは qmail の作者によるものであり、 http://cr.yp.to/cdb.html にあります。 固定であるため、読込操作のみがサポートされます。 PHP 4.3.0 以降、内部的な cdb ライブラリにより（更新ではなく） 書き込みがサポートされています。
`cdb_make` | PHP 4.3.0 以降、付属する cdb ライブラリを使用する場合に cdb ファイルの（更新ではなく）作成をサポートします。
`flatfile` | これは、PHP 4.3.0 以降で利用可能で、古い dbm 拡張モジュールとの互換性の ためだけのものであり、使用するべきではありません。 しかし、ファイルがこの形式で作成された場所でこれを使用する ことができます。これは、configure が外部ライブラリを見付ける ことができない場合に生じます。
`inifile` | これは PHP 4.3.3 以降で利用可能で、PHP スクリプトから php.ini ファイルを書き換えられるようにします。ini ファイルを扱う場合は、 array(0=>group,1=>value_name) のような配列、あるいは "[group]value_name" のような文字列を渡します（group はオプションです）。 dba_firstkey() や dba_nextkey() はキーを文字列形式で返しますが、PHP 5 以降で利用できる dba_key_split() を用いるとそれを配列形式に 変換できます。その際に `FALSE` を失うこともありません。
`qdbm` | これは PHP 5.0.0 以降で有効です。qdbm ライブラリは http://qdbm.sourceforge.net にあります。

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

# インストール手順

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

警告
PHP の configuring とコンパイルを済ませたら、コマンドラインから次の テストを実行する必要があります: `php run-tests.php ext/dba` これは、指定したハンドラの組み合わせが動作するかどうかを調べます。 いちばん問題のあるのは `dbm` と `ndbm` の組み合わせで、これらは多くの場合何らかの衝突を引き起こします。 その原因は、いくつかのシステムではこれらのライブラリが他のライブラリの 一部となっていることで。configure 時のテストでは個々のハンドラについての 設定不備は調べられますが、それらの組み合わせについてはテストできません。

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

ハンドラ | configure のスイッチ
--- | ---

`dbm`

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

> 注意: dbm は一般的にはラッパで、しばしば失敗を引き起こします。 その動作をしっかり把握しており、ほんとうにそれを必要とする場合のみ dbm を使用するようにすべきです。

`ndbm`

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

> 注意: ndbm は一般的にはラッパで、しばしば失敗を引き起こします。 その動作をしっかり把握しており、ほんとうにそれを必要とする場合のみ ndbm を使用するようにすべきです。

`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 4.3.2 で追加されました。これ以前のバージョンでは、 `--with-db3=DIR` を使用し、 DIR に db4 ライブラリのパスを指定する必要する必要があります。 バージョン 4.3.0 より前の PHP では、4.1 以降のバージョンの db を使用することはできません。また、バージョン 4.1 から 4.1.24 までの db ライブラリは、どの PHP のバージョンでも利用できません。

`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 ハンドラを使用することができない場合にのみ使用してください。

`inifile`

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

> 注意: これは PHP 5.0.0 で追加されました。これにより Microsoft 形式の `.ini` ファイル（`php.ini` のような）を 読み書きできるようになります。

`qdbm`

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

> 注意: qdbm は dbm および gdbm とは同時に使えません。

> 注意: これは PHP 5.0.0 で追加されました。qdbm ライブラリは http://qdbm.sourceforge.net にあります。

> 注意: 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_open() または dba_popen() に 4 番目の引数として渡されます。

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

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

`<?php // データベースをオープンする $key = dba_firstkey($id); while ($key != false) { if (true) { // 他の操作を後で行うためにキーを記憶する $handle_later[] = $key; } $key = dba_nextkey($id); } foreach ($handle_later as $val) { dba_delete($val, $id); } ?>`

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