PHP マニュアル
前のページ | 第 45章PDO ドライバ How-To | 次のページ

# 準備

## ソースディレクトリの構造

典型的な PDO ドライバのソースディレクトリは以下のようになっています。 ここで、`SKEL` はドライバが接続しようとしている データベース名の短縮形式を表します。ここでは SKEL が大文字で 表記されていますが(存在をはっきりさせるためです)、実際は 小文字を使用するのが慣例です。

    pdo_SKEL/
      config.m4
      config.w32
      CREDITS
      package.xml
      pdo_SKEL.c
      php_pdo_SKEL.h
      php_pdo_SKEL_int.h
      SKEL_dbh.c
      SKEL_stmt.c

  unix 用のビルドスクリプト
  win32 用のビルドスクリプト
  パッケージのメタ情報
  標準 PHP 拡張モジュールとの橋渡し
  ドライバ固有のヘッダ
  PDO ドライバインターフェイスの実装を含みます
  PDO ステートメントインターフェイスの実装を含みます

これらのファイルの内容については、この文書の後半で説明します。

## 雛形の作成

開発を始めるにあたっての最もお手軽な方法は、PHP ビルドツリーの `ext` ディレクトリにあるシェルスクリプト ext_skel を使用することです。 このスクリプトは、上で挙げた多くのファイルを含む雛形ディレクトリを 作成します。スクリプトは、`ext` ディレクトリの 中で以下のように実行します。

    ./ext_skel --extname=pdo_SKEL

これにより pdo_SKEL というディレクトリが作成され、その中に これから書き換えていく元となるファイルが作成されます 次に、このディレクトリを PHP のエクステンションディレクトリに 移動します。PDO は PECL 拡張モジュールなので、標準的な エクステンションディレクトリには含まれません。 PHP および PDO がインストールされていれば、どのディレクトリからでも ビルドすることが可能です。

## 標準的な include ファイル

### ビルド固有のヘッダ

configure の際に、ドライバのビルドに使用するプラットフォーム固有の ヘッダファイル config.h が作成されます。このヘッダが存在する場合、 コンパイラ変数 HAVE_CONFIG_H が設定されます。コンパイル時には この変数が存在するかどうかが調べられ、もし設定されていれば config.h が include されます。

### PHP のヘッダ

各ソースモジュールには、以下の標準 PHP ヘッダが include されます。

1. php.h

2. php_ini.h

3. ext/standard/info.h

### PDO インターフェイスのヘッダ

各ソースモジュールには、以下の標準 PDO ヘッダファイルも include されます。

pdo/php_pdo.h

  このヘッダファイルには、ドライバの初期化やシャットダウンのための 関数の定義やグローバル PDO 変数の定義が含まれます。

pdo/php_pdo_driver.h

  このヘッダには、PDO ドライバを書く際に使用する型や API の規約が 含まれます。PDO レイヤへのコールバックの定義、PDO にドライバを 登録したり登録を解除したりする関数の定義も含まれます。 最も重要なものとして、このヘッダファイルには PDO データベース ハンドルやステートメントの型定義が含まれています。 ドライバが主に使用する 2 つの構造体 pdo_dbh_t および pdo_stmt_t については、それぞれ 付録 A および B で詳細に説明します。

### ドライバ固有のヘッダ

典型的な PDO ドライバは 2 つのヘッダファイルを保持しており、ここに データベースの実装に依存する内容が記述されます。実装内容によって これが変わることがあってもかまいませんが、規約では以下の 2 つの ヘッダが標準となっています。

php_pdo_SKEL.h

  このヘッダファイルは、先ほど挙げた pdo/php_pdo.h の機能と内容を 完全に複製したもので、データベースに応じて変更していきます。 ドライバがグローバル変数を使用する場合、マクロ ZEND_BEGIN_MODULE_GLOBALS および ZEND_END_MODULE_GLOBALS を 使用してそれを定義しておく必要があります。これらの変数に アクセスする際に、マクロが使用されます。このマクロは 通常は PDO_SKEL_G(v) という名前で、v がアクセスされる グローバル変数となります。 詳細な情報は、Zend のプログラマ向けドキュメントを参照ください。

php_pdo_SKEL_int.h

  このヘッダファイルには、ドライバの実装固有の型定義や関数宣言が 含まれます。また、データベース固有の構造体 pdo_SKEL_handle および pdo_SKEL_stmt の定義も含みます。これらは private 構造体で、ハンドル構造体やステートメント構造体のメンバ driver_data として参照されます。

### オプションのヘッダ

ドライバの実装方法によっては、以下のヘッダを include する 必要があるかもしれません。

    #include <zend_exceptions.h>

前のページ | ホーム | 次のページ
要件 | 上に戻る | 雛形への肉付け