この章では、Windows 上でマイクロソフトのツールを用いて PHP をソースから コンパイルする方法を説明します。PHP を cygwin でコンパイルする場合は 第4章 を参照ください。
PHP のコンパイルとビルドにはマイクロソフトの開発環境が必要です。 Microsoft Visual C++ 6.0 が推奨ですが、Visual C++ .NET でも 動作します。PHP 5 以降では、マイクロソフトがフリーで公開している .NET ツール群を使用することもサポートされています (これには、Windows Platform SDK、Visual C++ Toolkit および .NET Framework SDK をインストールすることが必要です)。
ダウンロードしたファイルを展開するには、ZIP 展開ユーティリティが 必要です。Windows XP 以降のバージョンでは、ZIP 展開機能が すでに組み込まれています。
始める前に、ダウンロードしなければならないものがいくつかあります。
http://www.php.net/extra/win32build.zip から win32 ビルドツール
http://www.php.net/extra/bindlib_w32.zip から PHP が使用する DNS ネームリゾルバのソース。 これは win32build.zip に含まれる resolv.lib の代用です。
PHP を Apache モジュールとしてコンパイルする場合には Apache のソースも 必要です。
最後に、PHP 自体のソースが必要となります。最新の開発版を anonymous CVS から、または スナップショット、あるいは 最新のリリース版の ソース tar ボールをダウンロードします。
必要なパッケージをすべてダウンロードしたら、 ファイルを適切な位置に展開しなければなりません。
すべてのファイルを展開するための作業ディレクトリを作成します。 例えば C:\work
作業ディレクトリ (C:\work) 配下に win32build ディレクトリを作成し、そこに win32build.zip を展開します。
作業ディレクトリ (C:\work) 配下に bindlib_w32 ディレクトリを作成し、そこに bindlib_w32.zip を展開します。
作業ディレクトリ (C:\work) 配下に PHP のソースコードを展開します。
必要となるライブラリをビルド (あるいはもしバイナリが入手可能なら それをダウンロード) し、ヘッダおよびライブラリをそれぞれ C:\work\win32build\include およびC:\work\win32build\lib ディレクトリに配置します。
cygwin 版の bison および flex をインストールしていない場合は、 configure スクリプトがこれらのツールを見つけられるようにするために C:\work\win32build\bin ディレクトリを PATH に追加する必要があります。
+--C:\work | | | +--bindlib_w32 | | | | | +--arpa | | | | | +--conf | | | | | +--... | | | +--php-5.x.x | | | | | +--build | | | | | +--... | | | | | +--win32 | | | | | +--... | | | +--win32build | | | | | +--bin | | | | | +--include | | | | | +--lib |
Cygwin を使用していない場合は、 C:\usr\local\lib ディレクトリを作成した上で C:\work\win32build\bin にある bison.simple を C:\usr\local\lib にコピーする必要があります。
注意: PEAR およびそのコマンドラインインストーラを使用したい場合は、 CLI-SAPI が必須となります。PEAR およびそのインストーラについての 詳細な情報は、PEAR web サイトのドキュメントを参照ください。
resolv.lib ライブラリをビルドしなければなりません。 デバッグシンボルを有効にするか (bindlib - Win32 Debug) 否か (bindlib - Win32 Release) を決定してください。このとき、 どちらを選択したかを覚えておいてください。というのは、デバッグモードを 有効にした場合は、PHP もデバッグモードでビルドしないとリンクできなくなる からです。 適切な設定を用いてビルドします。
GUI ユーザの場合、C:\work\bindlib_w32\bindlib.dsw をダブルクリックして VC++ を起動します。 そして Build=>Rebuild All を選択します。
コマンドラインユーザの場合、C++ 環境変数が設定されているか、あるいは vcvars.bat を既に実行したかを確認してください。 そして、以下のコマンドを実行します。
msdev bindlib.dsp /MAKE "bindlib - Win32 Debug"
msdev bindlib.dsp /MAKE "bindlib - Win32 Release"
この章では、新しいビルドシステムを使用して PHP >=5 をコンパイルする 方法を説明します。これは CLI ベースのものであり、Unix での PHP のビルドシステムに非常に似ています。
注意: PHP 4 ではこの方式を使用することはできません。代わりに DSW ファイルを使用して PHP をビルドする [PHP 4]項 を参照ください。
はじめる前に、ファイルの配置項 をよく読んだ上で Libxml や ICU (これは PHP >= 6 で必要です) のような必要なライブラリをすべてビルドしておいてください。
まず最初に、スタートメニューから Visual Studio コマンドプロンプトを 開きます。通常のコマンドプロンプトではうまく動作しません。 おそらく、必要な環境変数が設定されていないからでしょう。 次に、たとえば cd C:\work\php-5.x.x などのように 入力して PHP のソースディレクトリに移動します。 いよいよ PHP の設定が始まります。
次に、バッチファイル buildconf を実行します。 これは、config.w32 ファイルの内容をもとにして 設定スクリプトを作成します。デフォルトでは、このコマンドは 以下のディレクトリから config.w32 を探します。 pecl; ..\pecl; pecl\rpc; ..\pecl\rpc。 PHP 5.1.0 以降では、引数 --add-modules-dir を指定することで、この振る舞いを変更可能です (例えば cscript /nologo win32/build/buildconf.js --add-modules-dir=../php-gtk2 --add-modules-dir=../pecl)。
次のステップは、出来上がった設定スクリプトの実行です。 使用可能な設定オプションの一覧を見るには、 cscript /nologo configure.js --help と入力します。それらのオプションを有効/無効にすることを決めたら、 たとえば cscript /nologo configure.js --disable-foo --enable-fun-ext のように指定します。 --enable-foo=shared のようにすると、'foo' を共有モジュールとしてビルドし、動的に読み込まれるようにします。
最後に、コンパイルです。これは、ただ単に nmake というコマンドを実行するだけです。できあがったファイル (たとえば .exe や .dll) は、Release_TS あるいは Debug_TS ディレクトリに 配置されます (スレッドセーフ環境でビルドされた場合)。 それ以外の場合は Release あるいは Debug ディレクトリに配置されます。
オプションとして、PHP のテストスイートを実行することもできます。 この場合は nmake test と入力します。 特定のテストだけを実行させたいのなら、変数 'TESTS' を指定します (例 nmake /D TESTS=ext/sqlite/tests test - これは sqlite のテストのみを行います)。 コンパイル時に作成されたファイルを削除するには、 nmake clean コマンドを使用します。
スナップショットをビルドする際に非常に有用な設定オプションが、 --enable-snapshot-build です。 これは、新たなコンパイルモード (nmake build-snap) を作成します。このモードは、使用可能なすべての拡張モジュールを (デフォルトでは共有モジュールとして) ビルドしようとしますが、 個々の拡張モジュールや SAPI の構築の際のエラーは無視されます。
DSW ファイルを使用して PHP をコンパイルする方法は、PHP 5 では サポートされていません。 より柔軟なシステムを 使用することができます。 今でもここで説明されている方法を使用することは可能です。しかし 今後はメンテナンスの頻度が下がるため、コンパイル時に問題が 発生する可能性があることを覚えておきましょう。 Windows で PHP 4 をコンパイルする場合は、ここで説明されている方法が 唯一のものです。
最初のステップは、MVC++ でコンパイルするための準備です。 Microsoft Visual C++ を起動し、メニューから ツール => オプション を選択します。 ダイアログで、ディレクトリタブを選択します。 実行ファイル、インクルードファイル、ライブラリファイル の設定を順に変更し、以下のようにします。
実行ファイル: C:\work\win32build\bin, Cygwin ユーザの場合: C:\cygwin\bin
インクルードファイル: C:\work\win32build\include
ライブラリファイル: C:\work\win32build\lib
まず始めは、標準的な CGI バージョンをビルドしてみると良いでしょう。
GUI ユーザの場合、VC++ を起動し、ファイル => ワークスペースを 開くを選び、C:\work\php-4.x.x\win32\php4ts.dsw を選択してください。続いて、構築=>アクティブな 構成を設定 を選び、php4ts - Win32 Debug_TS あるいは php4ts - Win32 Release_TS から好きなほうを 選択します。最後に、構築=>すべて構築 を選択します。
コマンドライン版ユーザの場合、C++ 用の環境変数が定義されている かどうか、もしくは、vcvars.bat を実行済みか どうか確認してから、 C:\work\php-4.x.x\win32 ディレクトリから次の内のいずれかを実行してください。
msdev php4ts.dsp /MAKE "php4ts - Win32 Debug_TS"
msdev php4ts.dsp /MAKE "php4ts - Win32 Release_TS"
ここまでの手順で、サブディレクトリ C:\work\php-4.x.x\Debug_TS または Release_TS に利用可能な php.exe が作成されているはずです。
main/config.win32.h ファイルを編集すると ビルドプロセスでの細かい設定を行えます。 例えば php.ini のデフォルトの位置を変えたり、組み込む拡張モジュールや 拡張モジュールのデフォルトの位置を変えることができます。
次に、PHP をコマンドラインから使用する ための CLI バージョンを構築しましょう。 php4ts_cli - Win32 Debug_TS または php4ts_cli - Win32 Release_TS を選択すること以外は CGI バージョンのビルド手順と同様です。コンパイルが成功すると Release_TS\cli\ または Debug_TS\cli\ ディレクトリの どちらかに php.exe が作成されます。
Microsoft IIS 上で PHP アプリを実行するための SAPI モジュール (php4isapi.dll) をビルドするには、 アクティブな設定を php4isapi-whatever-config にし、お望みの dll をビルドしてください。