2. PHP をコンパイルします
まず php-sdk をダウンロードし、最初に新しい php-sdk-binary-tools-20110915.zip をダウンロードして、
に解凍します。
f:php_stdiophp-sdk
ディレクトリ。解凍後、このディレクトリには bin サブディレクトリと script サブディレクトリが存在するはずです。
cmd ウィンドウを開き、f:php_stdiophp-sdk ディレクトリに切り替え、vcvarsall.bat を実行してコンパイル環境変数を設定します。
VS2008 インストール パス VCvcvarsall.bat
ここでの vcvarsall.bat の特定のディレクトリは、独自のインストール場所によって異なります。
次に、cmd ウィンドウに入り、次のコマンドの実行を続けます:
binphpsdk_setvars.bat
binphpsdk_buildtree.bat php54dev
このように、f:php_stdiophp-sdk ディレクトリの下に別の php54dev ディレクトリが存在します。
次に、deps を
に抽出し続けます。
f:php_stdiophp-sdkphp54devvc9x86
ディレクトリ。解凍後、このディレクトリ内の deps ディレクトリ以下のすべてのサブディレクトリが空のディレクトリであることがわかり、必要なモジュール/拡張ライブラリ ファイルが多数コピーされます。
次に、PHP-5.4.5 ソース コード ディレクトリを
にコピーします。
f:php_stdiophp-sdkphp54devvc9x86
ディレクトリ。 PHP ソース コード ディレクトリに入ります
cd f:php_stdiophp-sdkphp54devvc9x86php-5.4.5
を実行します
buildconf
次に、最初にphpをコンパイルしてみてください。通常、最初は、コアを正常にコンパイルできるように、コンパイルするモジュールの数をできるだけ少なくする必要があります。
--disable-all --enable-cli
を設定します
このステップの主な目的は、config.w32.h を生成することです。PHP を生成する必要がある場合は、続けて
を実行できます。
nmake clean; nmake
php5.4のコア部分とコマンドラインツールをコンパイルしました。 nmake clean は、従来のコンパイル中間結果ファイルによって引き起こされる干渉を回避するためのものです。
3. 新しい拡張機能 my_fopen
を作成します
PHP 拡張機能の基本構造は同じです。PHP の開発を容易にするために、ext_skel と ext_skel_win32.php がそれぞれ Linux 用と Windows 用の拡張スケルトン構築ツールとして提供されています。
今回は Windows での PHP 拡張機能開発環境の構築についてですので、ext_skel_win32.php を使用します。それによって生成された新しい拡張スケルトンは、VS で直接開くことができます。
上の図は ext_skel_win32.php でサポートされているパラメータです
最も一般的に使用されるものは --extname と --proto です:
extname: 拡張機能の名前を指定します
proto: 関数のスケルトンをすばやく構築するために、ファイルを作成して各関数の定義を記述することができます。
cd f:\php_stdio\php-sdk\php54dev\vc9\x86\php-5.4.5\ext
php ext_skel_win32.php --extname=my_fopen
上記の実行結果が表示され、新しい拡張機能スケルトンが正常に生成されたことがわかります。f:php_stdiophp-sdkphp54devvc9x86php-5.4.5ext を開くと、my_fopen フォルダーが表示されます。 「my_fopen」と入力すると、VS プロジェクト ファイルである my_fopen.dsp が表示されます。
今度は、必要な拡張機能を開発します。
4. 拡張機能をコンパイルして使用します
新しく作成された拡張機能には機能インターフェイスは作成されていませんが、デフォルトの拡張機能はテスト用の機能インターフェイスを提供します。
デフォルト関数の命名規則は次のとおりです:confirm_[extname]_compiled
関数インターフェース: stringconfirm_[extname]_compiled(string)
1. VS で my_fopen.dsp を開きます
2. プロジェクトのプロパティを設定します - 「構成プロパティ」 - 「C/C++」 - 「コード生成」、ランタイム ライブラリを設定します: マルチスレッド DLL (/MD)
3. プロジェクトのプロパティを設定します - 「構成: Release_TS に切り替えます」
4. プロジェクトのプロパティ - [構成プロパティ] - [C/C++] - [詳細] を設定し、コンパイルを C コードにコンパイル (/TC) に設定します
5. プロジェクトのプロパティ - 「構成プロパティ」 - 「リンカー」全般を設定し、出力ファイル: Release_TS/php_my_fopen.dll を設定します。
これを設定しないと、コンパイルして生成された後に拡張子を見つけるのがさらに面倒になります。したがって、この設定は必要ありません。
6. プロジェクトのプロパティ - 「構成プロパティ」 - 「リンカー」全般を設定し、追加のライブラリ ディレクトリを追加します: F:php_workphp-5.4.5dev
このオプションが設定されていない場合、コンパイラは次のように報告します: 入力ファイル "php5ts.lib" を開けません
7. 最後に F5 を押してコンパイルを実行します。 php_my_fopen.dll が生成されます
1 成功。DLL が正常に生成されたことを示します。
拡張機能が正常にコンパイルされたので、次のステップはそれを PHP で使用することです。
8. php_my_fopen.dll を F:php_workphp-5.4.5ext にコピーします
8. F:php_workphp-5.4.5php.ini を開き、extension=ext/php_my_fopen.dll を追加します
9. 新しい F:php_worktest.php を作成します
echoconfirm_my_fopen_compiled("テスト");
5. 新しい拡張機能のコンパイル時に問題が発生しました
1.致命的エラー C1902: プログラム データベース マネージャーが一致しません。インストールを確認してください。
mspdbsrv.exe または mspdbcore.dll が見つからないか、またはそのバージョンが mspdb80.dll のバージョンと異なっています。これら 3 つのファイルの同じバージョンがシステムにインストールされていることを確認してください。
これら 3 つのファイルを、VC インストール ディレクトリの Common7IDE ディレクトリから、インストール ディレクトリ
の VCbin にコピーします。
2. ../main/config.w32.h
を開けませんでした
PHP ソースコードの設定後に config.w32.h
が生成されます。
3. 入力ファイル「php5ts.lib」を開けません
プロジェクトのプロパティ ページで [C++] -> [アドバンス] -> [コンパイル] を [C コードにコンパイル (/TC)] に設定し、[リンカー] -> [追加のライブラリ ディレクトリ] を設定し、PHP バイナリ パッケージの dev ディレクトリを追加します。