PHP
downloads | documentation | faq | getting help | mailing lists | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Windows 用 PHP 拡張モジュール> <Xitami(Microsoft Windows 用)
Last updated: Fri, 14 Nov 2008

view this page in

ソースからのビルド

この章では、Windows 上でマイクロソフトのツールを用いて PHP をソースから コンパイルする方法を説明します。PHP を cygwin でコンパイルする場合は Unix システムへのインストール を参照ください。

Windows 上でビルドするための簡易ガイド

このステップバイステップの簡易ガイドは 2008 年 3 月に書かれたものです。 Windows XP サービスパック 2 に最新のアップデートを適用した環境で PHP 5.2.5 と PHP 5.3 をビルドします。 別のツールを使うこともあるかもしれません。

  1. 以下をダウンロードしてインストールする

  2. C:\Program Files\Microsoft SDKs\Windows\v6.1\Include\WinResrc.hC:\Program Files\Microsoft SDKs\Windows\v6.1\Include\winres.h にコピーする
  3. ディレクトリ C:\work を作成する
  4. » the Windows build tools をダウンロードし、それを C:\work に展開する
  5. ディレクトリ C:\usr\local\lib を作成し、 C:\work\win32build\bin\bison.simple をそのディレクトリにコピーする
  6. » the Windows DNS resolver library をダウンロードし、それを C:\work に展開する
  7. C:\work\bindlib_w32\bindlib.dsw 開く。 プロジェクトを更新するかどうかを聞かれたら「はい」を選択します。 Debug あるいは Release のいずれかの設定をトップツールバーで選択し、 Build => Build Solution を選択します。
  8. PHP のソースを取得して C:\work ディレクトリに展開する。この時点で、ディレクトリ階層は次のようになっています。
    +-C:\work
    | +-bindlib_w32
    | | +-Debug
    | | | +-resolv.lib
    | | | +-...
    | | +-...
    | +-win32build
    | | +-bin
    | | +-include
    | | +-lib
    | +-php-5.2.5
    | | +-build
    | | +-win32
    | | +-...
  9. スタートメニューから Visual Studio 2008 コマンドプロンプトを開く
  10. 次のコマンドを実行する
    C:\Program Files\Microsoft Visual Studio 9.0\VC> set "PATH=C:\work\win32build\bin;%PATH%"
    C:\Program Files\Microsoft Visual Studio 9.0\VC>
  11. C:\work\php-5.2.5 ディレクトリに移動する
  12. cscript /nologo win32\build\buildconf.js を実行する
  13. cscript /nologo configure.js --disable-all --enable-cli --enable-cgi --enable-object-out-dir=.. --disable-ipv6 を実行する。デバッグを有効にする場合は最後に --enable-debug を追加します。
  14. nmake を実行する
  15. すべてうまくいけば、PHP CLI の実行ファイルが C:\work\Debug_TS\php.exe あるいは C:\work\Release_TS\php.exe にできあがります。

Build Environment

PHP のコンパイルとビルドにはマイクロソフトの開発環境が必要です。 以下の環境をサポートしています。

  • Microsoft Visual C++ 6.0 (公式)
  • Microsoft Visual C++ .NET
  • Microsoft Visual C++ 2005, Windows Platform SDK および .NET Framework SDK (現在)

公式の Windows 版は VC6 (Microsoft Visual C++ 6.0) で作成していますが、これは現在 Microsoft のウェブサイトからはダウンロードできません。 フリーで Windows 版の PHP をビルドしたい方は、Microsoft Visual C++ 2005 Express Edition と補助コンポーネントを使用してください。

Microsoft Visual C++ 2005 Express の設定

注意: これらのコンポーネントは非常に大きなものであり、 すべてあわせると 1 ギガバイト以上のディスク容量が必要となります。

Microsoft Visual C++ 2005 Express の設定は少し複雑で、 3 つの別々のパッケージをインストールする必要があり、 互換性にかかわる変更もあります。 これらの 3 つのプログラムがインストールされた場所を覚えておくようにしましょう。 以下のプログラムをダウンロードしてインストールします。

インストールしたら、その後にいくつかの作業があります。

  • » MSVC 2005 Express は、 Windows Platform SDK を使用するように設定する必要があります。 PHP でグラフィカルなユーザインターフェイスを使用しないのなら、 次のステップを実行する必要はありません。
  • Windows Platform SDK には WinResrc.h というファイルが含まれています。通常、このファイルは SDK をインストールしたディレクトリの下の Include フォルダにあります。 これをコピーして winres.h という名前に変更します。PHP はこの名前のファイルを使用します。

最後に、MSVC 2005 Express をコマンドラインから使用する場合は、 いくつか環境変数を設定する必要があります。 vsvars32.bat というファイルが、通常は C:\Program Files\Microsoft Visual Studio 8\Common7\Tools にあります (見つからなければ検索してください)。 このファイルには、PATHINCLUDE そして LIB などの環境変数の宣言が書かれており、 それぞれ SDK のインストールディレクトリ配下の bininclude そして lib ディレクトリを含めるようになっています。

注意: .NET SDK のパスは既に vsvars32.bat に含まれているでしょう。 というのも、この SDK は自身のインストール先を Microsoft Visual C++ 2005 Express と同じディレクトリにするからです。

ライブラリ

ダウンロードしたファイルを展開するには、ZIP 展開ユーティリティが 必要です。Windows XP 以降のバージョンでは、ZIP 展開機能が すでに組み込まれています。

始める前に、ダウンロードしなければならないものがいくつかあります。

最後に、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.simpleC:\usr\local\lib にコピーする必要があります。

注意: PEAR およびそのコマンドラインインストーラを使用したい場合は、 CLI-SAPI が必須となります。PEAR およびそのインストーラについての 詳細な情報は、» PEAR web サイトのドキュメントを参照ください。

resolv.lib のビルド

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"

この時点で、使用可能な resolv.libC:\work\bindlib_w32\Debug または Release サブディレクトリのどちらかに存在します。 このファイルを C:\work\win32build\lib ディレクトリの同名のファイルに上書きコピーしてください。

新しいビルドシステムを使用して PHP をビルドする [PHP >=5 のみ]

この章では、新しいビルドシステムを使用して PHP >=5 をコンパイルする 方法を説明します。これは CLI ベースのものであり、Unix での 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 4]

DSW ファイルを使用して PHP をコンパイルする方法は、PHP 5 では サポートされていません。 より柔軟なシステムを 使用することができます。 今でもここで説明されている方法を使用することは可能です。しかし 今後はメンテナンスの頻度が下がるため、コンパイル時に問題が 発生する可能性があることを覚えておきましょう。 Windows で PHP 4 をコンパイルする場合は、ここで説明されている方法が 唯一のものです。

MVC ++ の設定

最初のステップは、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 をビルドしてください。



add a note add a note User Contributed Notes
ソースからのビルド
mohsen.hosseyni[A@T]gmail[D0T]com
18-Sep-2008 04:05
If you are looking for missed links for
  win32build
or
  bindlib_w32
you can find them in CVS address

http://viewcvs.php.net/viewvc.cgi/phpweb/extra

and then try to view the dead files,or try it directly by using this URL

http://viewcvs.php.net/viewvc.cgi/phpweb/extra/?hideattic=0

regard
Mohsen hosseini
tim at kem-tron dot com
03-Sep-2008 08:38
The links to download the Windows Build tools ZIP file and the DNS Name Resolver do not work on this page. They take me to a page alerting me that these names are not recognized functions... "but here are 20 functions that are close in spelling."

Seeing as we have to compile the build before I can use MySQL, and we have to have these tools to compile, can you fix this, please? Or is there another place for me to download these items, directly?

Both links appear twice on the page, and all four are incorrect.
mb at smartftp dot com
20-Jun-2008 02:33
If you are looking for the missing libxml includes and libs you can get them from:
http://www.zlatkovic.com/pub/libxml/

libxml also requires the iconv lib/includes. So download the following two packages:
iconv-1.x.x.win32.zip
libxml2-2.x.x+.win32.zip

Then add the include and lib directories to the command line:
cscript /nologo configure.js
  --with-extra-includes=
C:\work\libxml2-2.6.32+.win32\include;
C:\work\iconv-1.9.2.win32\include
  --with-extra-libs=
C:\work\libxml2-2.6.32+.win32\lib;
C:\work\iconv-1.9.2.win32\lib

Furthermore the compiler was complaining about a missing IPv6 struct so I had to disable IPv6:
--disable-ipv6

Regards,
Mat
SmartFTP
php at tattodecastro dot com
06-Dec-2007 04:14
If you are getting the following error message:
Input Error: There is no script engine for file extension ".js"
with Visual Studio 2005 Command Prompt or similar, try to add  "/e:jscript" to the command line.

Something like:
cscript /nologo /e:jscript win32/build/buildconf.js

It worked for me, I hope it helps.
giunta dot gaetano at gmail dot com
27-Jun-2007 06:43
A detailed tutorial for building php 5 using VC++ 2005 express edition (ie. the free version) is available here: http://elizabethmariesmith.com/2006/11/15/

It can be a huge time saver if you do not have a complete VC6 toolchain already setup
axel at kollmorgen dot net
27-May-2007 06:13
>>Compiling using Visual Studio .NET will create binaries dependent of msvcp71.dll
>
> Only if you compile with the wrong runtime library.

if this is so easy, please tell us how you managed to *not* create dependencies on msvcp71.dll/msvcr80/... using Visual C++ .NET 2000/2003/2005. thanks!
10-Dec-2006 06:09
>> Compiling using Visual Studio .NET will create binaries dependent of msvcp71.dll

Only if you compile with the wrong runtime library.
zbowden at vt dot edu
12-May-2006 07:12
When running "cscript /nologo configure.js" 5.x on Windows
2000 or XP, if you get the following error:
Microsoft JScript runtime error: Object doesn't support this
property or method

You need to have at least version 5.6 of WSH.
This is necessary because configure.js will use the .Exec()
method of the WScript.Shell.
This evidently didn't exist until 5.6?
 
You can download WSH 5.6 here:
http://www.microsoft.com/downloads/details.aspx?
FamilyID=c717d943-7e4b-4622-86eb-95a22b832caa&DisplayLang=en
C-Reaction.net - Software Development
03-Apr-2006 12:16
Don't forget to setup Environment variable:
BISON_SIMPLE="C:\\work\\win32build\\bin\\bison.simple"

or this can cause error:
c:/usr/local/lib/bison.simple: No such file or directory

Alexey Furmanov.
26-Jan-2005 04:30
Compiling using Visual Studio .NET will create binaries dependent of msvcp71.dll which has three repercussions:
1. This dll will need to be distributed.
2. The binaries are not currently compatible with the Zend optimiser (not sure why it should make a difference but it does).
3. Binaries are larger!

 
show source | credits | stats | sitemap | contact | advertising | mirror sites