PHP 8.0.0をソースからビルド(コンパイル)する (Windows10)

2021/05/05に公開

一つ前の記事 でプレリリース版(と思われる)バイナリをダウンロードし、配置(インストール)したがせっかくなら正式リリース版をビルドして導入してみたいので、Windows10 環境でビルドしてみる。

注意事項

この記事に記載されている内容を実行し、発生したいかなる問題について執筆者は一切責任を負いません。自己責任でお願いします。
ネット上の記事を探し回って結果としてできたもので、おまけに参考文献(後述)に書いてある内容をちょくちょく注釈つけただけではあるので、もし英語が読めるならもともとの記事を見たほうがよいかも。
解説のために画像や GIF を多用します。

基礎情報

環境

必須環境でない可能性があります(たとえば、Visual Studio は 2017 でもよいかもしれない)。

  • OS: Windows 10 2004(Build 19041.630)
  • winver
  • Visual Studio Community 2019 16.8.2
  • .tar.gz を展開できる環境・アプリケーション(7-Zip など)
  • PHP: PHP 8.0.0 (cli) ( ZTS Visual C++ 2019 x64 )

解説のために Windows SandBox を用いて作業を実施しています。

作業内容概要

詳しい内容を書く前に、ざっと概要を書きます。カレントディレクトリとか省いているところもあるので、詳細も読んでから作業してください。

  1. 「PHP SDK」をダウンロードし、配置する。
  2. PHP のソースコードをダウンロードしておく。
  3. x64 Native Tools Command Prompt for VS 2019」を使用して phpsdk-starter.bat -c vs16 -a x64phpsdk_buildtree.bat php-dev を実行する。
  4. ダウンロードした PHP のソースコードを展開して配置する。
  5. phpsdk_deps.bat -u を実行して、依存関係にあたるものをダウンロードする。
  6. phpsdk-vs16-x64.bat を実行して、初期処理を実施する。
  7. buildconf を実行して、configure を設定する。
  8. configure を実行して設定する。
  9. nmake を実行してコンパイルする。
  10. php -v, php -m して正常にコンパイルできたか調べ、問題なければ完了。

作業内容詳細

0. Visual Studio・7-Zip をインストールする

ビルド(コンパイル)を行うために Visual Studio が必要です。インストールします。

Visual Studio のダウンロードページ にアクセスし、コミュニティ版インストーラをダウンロードします。

インストーラをダウンロードしたら、そのインストーラを起動して「C++によるデスクトップ開発」にチェックを入れ「インストール」をクリックしインストールします。

また、tar.gz を解凍するために何かしらのツールが必要です。ここでは 7-Zip を使うため、それをインストールしておきます。


7-Zip の Web サイト から、最新の x64 の exe ファイルをダウンロードします。インストーラを実行しインストールしてください。

1. PHP SDK をダウンロードし、配置する

PHP をビルドするツールである PHP SDK を GitHub からダウンロードし、配置します。

microsoft/php-sdk-binary-tools にアクセスし「Code」をクリック、「Download ZIP」をクリックし Zip ファイルをダウンロードします。

このファイルはどこか適当なところに展開しましょう。ここでは C:\php8-build に展開します。
展開する際、php-sdk-binary-tools-master フォルダをそのまま展開・コピーせず、php-sdk-binary-tools-master の中身を展開しコピーしましょう。

2. PHP のソースコードをダウンロードしておく

次に、ビルド(コンパイル)するソースコードを用意します。

PHP: Downloads にアクセスし、tar.gz 形式のソースコードファイル(ここでは php-8.0.0.tar.gz)をダウンロードします。
とりあえずこの項ではダウンロードだけ行い、展開はあとでやります。

3.「x64 Native Tools Command Prompt for VS 2019」を使用して phpsdk-starter.bat -c vs16 -a x64phpsdk_buildtree.bat php-dev を実行する

※画像上ではコマンドプロンプト(cmd)を使用していますが、ほかの記事では x64 Native Tools Command Prompt を使用している記事ばかりなので便宜上使用することを前提に話を進めます。これの違いはあとあと調べるかも…。実際のところコマンドプロンプトで動作させてもコンパイルまで成功してはいます。

Visual Studio をインストールしたことにより、「スタート」内の最近追加されたものに「x64 Native Tools Command Prompt for VS 2019」があるはずです。まずはこれをクリックして開きます。


次に、cd コマンドを使い cd C:\php8-build でカレントディレクトリを変更したあと(※画像では実施されていません)、次のコマンドを実行します。

phpsdk-starter.bat -c vs16 -a x64
phpsdk_buildtree.bat php-dev

phpsdk-starter.bat では以下のオプションを指定しています。

  • vs16 = Visual Studio 2019 を使用すること
  • アーキテクチャは x64 を使用することを明示して PHP SDK を開始していること

phpsdk_buildtree.bat では PHP SDK が使うディレクトリを生成してカレントディレクトリを変更する指定をしています。

4. ダウンロードした PHP のソースコードを展開して配置する

エクスプローラーで、2 でダウンロードしたファイルを右クリックし 7-Zip開く (Open archive) を実行します。
そのあと、開いた 7-Zip の画面で php-8.0.0.tar をクリックして開き、php-8.0.0 フォルダを php-dev\vs16\x64 に展開・移動して配置します。

5. phpsdk_deps.bat -u を実行して、依存関係にあたるものをダウンロードする

コマンドプロンプト(x64 Native Tools Command Prompt for VS 2019)に戻り、cd php-8.0.0 でカレントディレクトリを変更したあと C:\php8-build\bin\phpsdk_deps.bat -u を実行します。
..\..\..\..\bin\phpsdk_deps.bat -uC:\php8-build\bin\phpsdk_deps.bat -u でもかまいません。
これにより、依存関係として必要なパッケージがダウンロードされます。

6. phpsdk-vs16-x64.bat を実行して、初期処理を実施する

依存パッケージがダウンロードできたら、..\..\..\..\phpsdk-vs16-x64.batC:\php8-build\phpsdk-vs16-x64.bat を実行します。よく調べると、中では phpsdk-starter.bat を叩いているだけなので 3 の phpsdk-starter.bat はこれを実行しても良かったわけです。

7. buildconf を実行して、configure を設定する

buildconf を実行して、configure を設定します。正確には再生成しています。

8. configure を実行して設定する

Linux 系でコンパイルするときと同じように、必要なモジュールを引数で選択しコンパイル設定をします。ここでは、日本語などのマルチバイト文字列を扱うための mbstring、同様にマルチバイト用の正規表現をするための mbregex、cURL を利用するための curl、SSL のための openssl、画像処理のための gd、データベース操作のための mysqli を選択し設定しました。
Type 'nmake' to build PHP と表示されれば完了です。

9. nmake を実行してコンパイルする

さて、やっとコンパイルです。nmake を実行してコンパイルしましょう。スペックにもよりますが 3 分くらいで終わりました。
build complete と表示されれば成功です。

10. 正常にコンパイルできたか調べ、問題なければ完了

コンパイルされたものは C:\php8-build\php-dev\vs16\x64\php-8.0.0-src\x64\Release_TS にあります。ここに php.exe があると思うのでこれをコマンドプロンプト経由で実行しましょう。
まずはバージョンを見るために php -v と実行します。

ここでたいていの場合画像のようなエラーが出ると思われます。実行に必要な DLL ファイルが見つからないというものです。
これらの DLL ファイルは C:\php8-build\php-dev\vs16\x64\deps\bin にあります(必要なものが全部あるのかはわからない…)。表示されている ~.dll をそのフォルダから探し出し、php.exe があるフォルダにコピーすると正常に動作するはずです。

私はごちゃごちゃするのも嫌だったので、php.exe を含む必要と言われたファイルのみ別のフォルダにコピーして実行できるようにしてみました。

終わりに

疲れました。いや、Linux で ffmpeg のビルドとかは多少やったことあれどそれ以外でコマンドラインによるビルドとかしたことない(Visual Studio 経由はあっても)のでしくみの理解に結構頭を悩ませました。
とはいえど、ネット上にすばらしい記事があってわかり易かったので非常に助かりました…。それでもこの解説記事で 4000 文字くらい書いたと思います。

参考文献

GitHubで編集を提案

Discussion