dba_open

(PHP 4, PHP 5, PHP 7, PHP 8)

dba_openデータベースをオープンする

説明

dba_open(
    string$path,
    string$mode,
    ?string$handler = null,
    int$permission = 0644,
    int$map_size = 0,
    ?int$flags = null
): resource|false

dba_open() は、handler を用いて mode を指定し、path にデータベースインスタンスを生成します。

パラメータ

path

通常のファイルシステムのパス。

mode

既存のデータベースへの読み込みアクセスには "r"、読込み/書き込み アクセスには "w" を指定します。 読み込み/書き込みアクセスおよび存在しない場合にデータベースの作成を するには "c" を、そして作成、削除、読込み/書き込みアクセス用には "n" を指定します。データベースは BTree モードで作られます。 その他のモード (Hash や Queue) には対応していません。

さらに、次の文字でデータベースのロック方法を指定することができます。 .lck でデータベースをロックする場合には "l"、 データベースファイル自体をロックする場合は "d" を使用してください。 アプリケーション全体で統一した方法を用いることが重要です。

アクセスのテストを行う際にロックのために待ちたくない場合、"t" を 3 番目の文字に追加することができます。明らかにデータベースのロックが 不要な場合には、"l" や "d" の代わりに "-" を使用してロックを 行わないことができます。"d"、"l" または "-" のどれも指定されない場合、 "d"が指定されたものとしてデータベースファイルをロックします。

注意:

ひとつのデータベースファイルに同時に書き込めるのは、ひとつだけです。 dba を Web サーバーで使用している際に複数のリクエストが書き込み処理を 行う必要がある場合、他の書き込みが終わってからでないと次の書き込みを 行うことができません。また、書き込み中に読み込むことはできません。 dba 拡張モジュールは、このようなことを防止するためにロックを使用します。 以下の表を参照ください:

DBA のロック処理
既にオープンしているデータベースmode = "rl"mode = "rlt"mode = "wl"mode = "wlt"mode = "rd"mode = "rdt"mode = "wd"mode = "wdt"
not openokokokokokokokok
mode = "rl"okokwaitfalseillegalillegalillegalillegal
mode = "wl"waitfalsewaitfalseillegalillegalillegalillegal
mode = "rd"illegalillegalillegalillegalokokwaitfalse
mode = "wd"illegalillegalillegalillegalwaitfalsewaitfalse
  • ok: 2 番目のコールは成功します。
  • wait: 2 番目のコールは、最初のデータベースで dba_close() がコールされるまで待ちます。
  • false: 2 番目のコールは、false を返します。
  • illegal: mode パラメータで "l" および "d" を同時に使用することはできません。
handler

path にアクセスする際に使用する ハンドラの名前。 dba_open() に指定したすべてのオプションが渡され、 その機能を用いることができます。 handlernull の場合、 デフォルトのハンドラが使われます。

permission

ドライバに渡されるオプションの整数パラメータ。 chmod()permissions を同じ意味です。 デフォルトは 0644 です。

db1, db2, db3, db4, dbm, gdbm, ndbm, lmdb ドライバが permission パラメータをサポートしています。

map_size

ドライバに渡されるオプションの整数パラメータ。 OS のページサイズの倍数を指定すべきです。 ゼロを指定すると、デフォルトのマップサイズが使われます。

lmdb ドライバだけが map_size パラメータを受け入れます。

flags

データベースドライバに渡すフラグ。 null の場合、 デフォルトのフラグが渡されます。 現状、LMDB ドライバだけが DBA_LMDB_USE_SUB_DIRDBA_LMDB_NO_SUB_DIR をサポートしています。

戻り値

成功した場合に正のハンドルを返します。 失敗した場合に false を返します。

エラー / 例外

handlernull が指定されているのにデフォルトのハンドラが存在しない場合、 E_WARNING レベルのエラーが発生し、 false が返されます。

変更履歴

バージョン説明
8.2.0flags が追加されました。
8.2.0handler は、nullable になりました。
7.3.14, 7.4.2lmdb ドライバは、 map_size パラメータを追加でサポートしました。

参考

  • dba_popen() - データベースを持続的にオープンする
  • dba_close() - DBA データベースを閉じる
To Top