PHPソースコードリーディング入門(とっかかり編)
とりあえずビルドしてみる
ビルドに必要なツールをインストールした後、buildconfスクリプトを叩いてconfigureスクリプトを生成したのち、通常通りconfigureを叩いてmakeする。例えば、余計な拡張を一切ビルドせずデバッガで動かせるようにビルドしたい場合は以下のようになる。
$ cd php-src $ ./buildconf $ ./configure --disable-all --enable-debug $ make
コマンドラインから叩けるバイナリは、"sapi/cli/php"にある。
$ sapi/cli/php -r "echo 'hello world';" hello world
どこに何があるのか?
PHPのソースディレクトリ以下のディレクトリには以下のようなものがある。
$ ls -F | grep / TSRM/ Zend/ build/ ext/ main/ netware/ pear/ sapi/ scripts/ tests/ win32/
これの一つ一つに何が置かれているかを簡単に解説すると以下になる。
- TSRM
- TSRMはThread Safe Resource Managerの略。スレードセーフなメモリ管理に関するコードが置かれている。
- Zend
- 言語のコアな部分。マニュアルには書かれいていない言語コアに関するドキュメントもここにおいてある。
- build
- ビルドシステムに関連するものが置かれている。configreuスクリプトを生成するためのbuildconfスクリプトの本体もここ。
- ext
- 組み込みの拡張が置かれている。標準関数もstandardディレクトリ以下にある。
- main
- HTTPヘッダやphp.ini、PHPの変数、PHPのストリームを扱うコードなど、PHP固有だがZendディレクトリ以下の言語処理系のコアには直接関係ない部分が置かれている。
- netware
- netware用のコードが置かれている。よく知らない。
- pear
- PEARインストール用のスクリプトなどが置かれている。
- sapi
- SAPIモジュールと呼ばれる様々なウェブサーバで利用するためのアダプタが置かれている。コマンドラインで利用できるPHPのエントリポイントもここのcliディレクトリ以下に置かれている。
- scripts
- PECLをビルドする時に使うphpizeなどのツールを生成するためコードや各種雑多なスクリプトが置いてある。
- tests
- phpt形式のテストが置かれている。言語コアに関するテストはここではなくてZend/testsに置かれているので注意。
- win32
- windows用のコードが置かれている。よく知らない。