ホームページ  >  記事  >  バックエンド開発  >  Windows での PHP 拡張機能開発環境の構築の準備

Windows での PHP 拡張機能開発環境の構築の準備

WBOY
WBOYオリジナル
2016-06-13 13:06:321032ブラウズ

Windows での PHP 拡張機能開発環境の構築

1. 事前準備

VS2008 をダウンロードしてインストールします
PHP5.4.5 プログラムをダウンロード:
NTS ダウンロード
TS ダウンロード
php バイナリ パッケージは、VC6、VC8、VC9、TS および NTS バージョンに分かれています。
VC6、VC8、VC9 はそれぞれ VC6、VC2005、VC2008 に対応します
TS は (Thread Safe) を意味します。ISAPI (IIS SERVER) で許可されている場合、単一プロセスで複数のスレッドが実行されるため、メモリ リークと共有変数の安全性を回避するために、次のようにすることをお勧めします。 TS版を使用してください。
FAST_CGI などを単一プロセスで実行する場合、スレッドの安全性チェックを行う必要はありません。

PHP5.4.5 ソースコードをダウンロード
PHP-SDK をダウンロード
Windows での Linux コンパイラの実装を含む MSYS をダウンロード
deps をダウンロード

次の設定の基本は f:php_stdio フォルダーに基づいています

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 ディレクトリを追加します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。