はじめに
PHPは標準で多くの拡張モジュールがバンドルされており、また、PECL としてさらに多くの拡張モジュールが用意されています。しかし、どこにも自分が欲しいものがないときはどうしましょう? 答えは諦めるか、自分で作るかのどちらかです。筆者は「自分で作る」を選び、C言語そのものと平行してPHP拡張モジュールの作り方を学んでいきました。
本連載ではLinux、FreeBSD、Solaris、Mac OS X等のUNIX系OS上でC言語によるPHP 5.2向けの拡張モジュールを作成する方法を紹介します。Windowsでは拡張モジュールのビルド方法がUNIX系とは異なり、筆者はそちらには明るくないので本連載では触れませんが、ほとんどのAPIはWindowsでもそのまま利用できるので開発の参考にはなるかと思います。PHPはバージョンによってZend API(C言語のAPI)が同名の関数でも引数が変更されていたりと、互換性のない変更があるので、現在の最新安定版であるバージョン5.2系列より古いものは対象から外します。バージョン5.3や6.0のAPIと互換性が無い部分に関してはその都度注釈を入れるようにします。
まず第1回目である今回は、PHP拡張モジュールの制作環境を整えます。前提条件としてPHP 5.2とGCC等のコンパイラは既にインストールされているものとします。また、シェル上での作業は基本的に一般ユーザ権限で行い、インストールのみsudoコマンドを使ってスーパーユーザ権限で実行するものとします。
CodeGen_PECLのインストール
PHP拡張モジュールを作成する際に、古くはext_skelコマンド でひな形を生成していましたが、本連載ではより使いやすく、機能も豊富なCodeGen_PECL を使います。CodeGen_PECLはPEARパッケージですので、pearコマンドでインストールします。pearコマンドがインストールされていない場合は、PEARマニュアル:インストール を参考にPEARをインストールして
ください。
CodeGen_PECLのインストール
$ sudo pear install --alldeps codegen_pecl
CodeGen_PECLをインストールすると、pecl-genコマンドが利用できるようになります。
pecl-genコマンドのチェック
$ which pecl-gen
/usr/local/bin/pecl-gen
$ pecl-gen --version
pecl-gen 1.1.0, Copyright (c) 2003-2006 Hartmut Holzgraefe
今後はこのpecl-genコマンドを使ってXML形式で拡張モジュールの仕様を記述したspecファイルからソースコード等を生成し、必要ならそれらに手を加え、ビルドするという形で連載を進めていきます。pecl-genコマンドの使い方やspecファイルの書き方は次回から追々説明していきますが、予習としてCodeGen_PECLのマニュアル(英文) に目を通していただくことをお勧めします。
ビルドに必要なツールのインストール
次に、PHPマニュアル:PECL拡張モジュールのインストール およびPHP:Anonymous CVS Access で示されている、拡張モジュールのビルドに必要な以下のツールをインストールします。
ソースコードからインストールする場合はconfigureとmakeを使うUnixツールでは一般的な方法です。ちなみに筆者はPHP:Anonymous CVS Access で動作報告のあるautoconf 2.13、automake 1.5、libtool 1.4.3を/opt/php/build以下にインストールしており、PHPおよび拡張モジュールのビルド時には/opt/php/build/binを検索パスの先頭に設定しています。
m4のインストール
$ tar xfz m4-1.4.10.tar.gz
$ cd m4-1.4.10
$ ./configure
$ make
$ sudo make install
autoconfのインストール
$ tar xfz autoconf-2.13.tar.gz
$ cd autoconf-2.13
$ ./configure
$ make
$ sudo make install
automakeのインストール
$ tar xfz automake-1.5.tar.gz
$ cd automake-1.5
$ ./configure
$ make
$ sudo make install
libtoolのインストール
$ tar xfz libtool-1.4.3.tar.gz
$ cd libtool-1.4.3
$ ./configure
$ make
$ sudo make install
また、RPMやAPTのようなパッケージ管理システムのPHPでは、拡張モジュールのビルドに必要なphpizeコマンドがインストールされないことがあるので、その場合は別途PHP開発ツールのパッケージ(例:php5-devel、php5-dev)もインストールしてください。パッケージ管理システムでPHPおよびphpizeコマンドをインストールする場合は、依存関係によりautoconf等も自動でインストールされるでしょう。
おわりに
これでPHP拡張モジュールを作成するための環境は整いました。次回は実際にCodeGen_PECLを使って“ Hello, World!” を表示する拡張モジュールを作成します。第3回以降はいくつかの実用的な拡張モジュールの作成を通じてCodeGen_PECLのより詳しい解説とZend APIの紹介をしていきます。ご感想やご要望等、フィードバックをいただければ幸いです。