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

目次

  1. 目次
  2. 注意事項
  3. 基礎情報
  4. 環境
  5. 作業内容概要
  6. 作業内容詳細
    1. 0. Visual Studio・7-Zipをインストールする
    2. 1. PHP SDKをダウンロードし、配置する。
    3. 2. PHPのソースコードをダウンロードしておく
    4. 3. 「x64 Native Tools Command Prompt for VS 2019」を使用してphpsdk-starter.bat -c vs16 -a x64phpsdk_buildtree.bat php-devを実行する
    5. 4. ダウンロードしたPHPのソースコードを展開して配置する。
    6. 5. phpsdk_deps.bat -uを実行して、依存関係にあたるものをダウンロードする
    7. 6. phpsdk-vs16-x64.batを実行して、初期処理を実施する。
    8. 7. buildconfを実行して、configureを設定する。
    9. 8. configureを実行して設定する。
    10. 9. nmakeを実行してコンパイルする。
    11. 10. 正常にコンパイルできたか調べ、問題なければ完了
  7. 終わりに
  8. 参考文献

注意事項

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

解説のために画像や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では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でカレントディレクトリを変更したあと..\..\..\..\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文字くらい書いたと思います。

参考文献

Categories: 日記