読者です 読者をやめる 読者になる 読者になる

PHPソースコードリーディング入門(とっかかり編)

PHPソースコードを読むためのとっかかりの話。

ソースコード取ってくる

gitから取得できる。

$ git clone https://github.com/php/php-src.git

とりあえずビルドしてみる

ビルドに必要なツールをインストールした後、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用のコードが置かれている。よく知らない。

終わり

この記事では、PHPソースコードの取得とPHPのビルドとソースディレクトリ以下のどこに何があるのかを記述した。次はデバッガを用いて実際にPHPの動作を確かめる。