Windows で PHP 拡張機能を作成する
Windows での PHP 拡張機能の作成
2011 年 1 月 26 日
転載元: http://demon.tw/software/compile-php-on-windows.ht ml
PHP 拡張機能のコンパイルに必要ヘッダー ファイルは、一部の構成ヘッダー ファイルを含め、PHP ソース コードから取得する必要があります。これらのファイルは、以下の手順 8 の後に完了する必要があります。これは、PHP サーバー プログラムが、他の人によってコンパイルされたインストール パッケージを使用できることを意味します。 最近、PHP 拡張機能の作成を学習していましたが、Linux をインストールするのが面倒だったので、Windows で PHP をコンパイルする方法を研究し、最終的に Windows で PHP 拡張機能を開発する環境をセットアップしました。
1. C ドライブに新しいフォルダー C:PHPDEV を作成します
2. 公式 Web サイトから最新バージョンの PHP ソースコード (ここでは 5.2.14 を使用しています) をダウンロードし、ダウンロードした tar を圧縮します.gz または tar.bz2 パッケージを C:PHPDEV に保存し、現在のフォルダーに抽出します
3. php win32 ビルド エクストラをダウンロードして C:PHPDEV に保存し、現在のフォルダーに抽出します
4. Getコンパイルされた bison.exe および flex.exe は、デスクトップまたは C:PHPDEV 以外の場所に保存されます。圧縮パッケージを開いてそれぞれ bin フォルダーに入り、bison.exe と flex.exe を C: Windows フォルダーにコピーします
5. Visual Studio 2008 がインストールされていると仮定します (個人的には Visual Studio 2008 の使用はお勧めしません。 Platform SDK の使用が推奨されています (2003 年 2 月)。正式にコンパイルされたバージョンはこの PSDK でコンパイルされていますが、ここでは説明のために Visual Studio 2008 が使用されています)、[スタート] メニュー -> Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 コマンド プロンプト、Visual Studio 2008 コマンド プロンプトを開きます
6. cd コマンドを使用して、ディレクトリを C:PHPDEVphp-5.2.14 に切り替えます
7. buildconf.bat と入力し、Enter キーを押します。このバッチ プロセスの目的は、すべての .w32 ファイルを検索し、configure.js を作成することです
8. 次のコマンドを入力します
cscript /nologo configure.js without-xml without-wddx without-simplexml without-dom without -libxml disable-zlib - without-sqlite disable-odbc disable-cgi Enable-cli Enable-debug without-iconv disable-ipv6
なぜこれほど多くの機能を使用せずに disable が必要なのでしょうか?これらの関数に必要なライブラリ ファイルは PHP ソース コード パッケージには含まれていないため (そうしないと非常に大きくなってしまうため)、これらの追加ライブラリ ファイルを自分でダウンロードする必要があります (すべてを見つけるのはそれほど簡単ではありません)。これらの機能を無効にしないと、コンパイル エラーが発生します。
9. nmake と入力して Enter キーを押します
10. ステップ 9 で、ファイルのエンコード エラーが発生している可能性があります。エラーのあるファイルを見つけ、EditPlus を使用して西ヨーロッパ (Windows) エンコードを選択し、それを開いて保存します。 utf-8 エンコーディングとして、nmake
11 を書き換えます。コンパイル後、C:PHPDEVphp-5.2.6Debug_TS に切り替えてテストします。
php -r "echo 'hello,world';" 2. Windows 拡張機能で PHP を開発する 転載元: http://blog.csdn.net/linvo/archive/2009/04/17/4086 909.aspx
ステップ 1: 準備
1. Windows に PHP ソース コード パッケージとバイナリ パッケージを配置し、Visual C++ をインストールし、Microsoft Visual StudioCommonMSDev98Bin の絶対パスを Windows 環境変数
に追加します。 2. ソース コード パッケージを d:php_src に解凍します
3. d:php_srcext ディレクトリに移動し、スケルトン ファイル フォルダをコピーし、開発する拡張機能の名前に変更します。この場合は「linvo」
4. バイナリ パッケージの dev ディレクトリにある php5ts.lib ファイルを次のディレクトリにコピーします。新しく作成された linvo ディレクトリ
5. linvo ディレクトリを編集します。 php_skeleton.h、skeleton.c、skeleton.dsp の 3 つのファイルについて、コンテンツ内のすべての extname を linvo に、EXTNAME を LINVO に置き換えます。 (大文字と小文字は厳密に区別されます)
ステップ 2: エンコード
6. php_skeleton.h ファイル (ヘッダー ファイル) を編集します。
以下に PHP_FUNCTION(confirm_linvo_compiled) を記述します。
PHP_FUNCTION(hello); hello 関数
7.skeleton.c ファイル (メイン ファイル) を編集します
以下に PHP_FE(confirm_linvo_compiled, NULL) を記述します
PHP_FE(hello, NULL)
これは関数のエントリです。関数の本体
テスト関数である PHP_FUNCTION(confirm_test_compiled) 関数を見つけます。この関数の後に新しい関数を記述します。
PHP_FUNCTION(hello)
{
char *arg = NULL;
int arg_len, len;
Char *strg;
/*パラメータを受け取る*/
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
return ;
}
len = spprintf(&strg, 0, "Hello,%s", arg);
RETURN_STRINGL(strg, len, 0);ステップ 3: コンパイル
8. cmd コマンド ラインを実行し、d:php_srcextlinvo ディレクトリに入ります
9. msdev linvo.dsp /MAKE "linvo - Win32 Release_TS" と入力します
10. エラーがない場合は、 php_src ディレクトリの Release_TS フォルダにファイルが生成され、コンパイルされた php_linvo.dll 拡張子が含まれます
ステップ 4: 使用
11. それを実行環境の php 拡張子ディレクトリ ext にコピーします
12. 編集php.ini に extension= php_linvo.dll を追加し、Apache を再起動します
13. PHP ファイルで次のステートメントを実行します。
echo hello('Linvo');
これにより、
Hello,Linvo
が出力されます。拡張機能がロードされました 情報
Linvo
linvo サポートが有効になりました 3. 読み込みの問題
生成された拡張機能がフォルダーに配置され、php.ini が変更されると、生成された拡張子dllが存在しない場合はphpで読み込まれますので、以下の点から確認できます。
1. PHP を作成し、phpinfo() 関数を使用して現在の PHP 情報を入力し、実際に PHP にロードされている php.ini を見つけます。
2. Apache を再起動しましたか?
3. Apache エラー ログをチェックして、拡張機能のロード時のエラーに関する情報があるかどうかを確認します。 「PHP 警告: PHP 起動: extname: モジュールを初期化できませんnモジュール API=20090626、debug=0、thread-safety=1n でコンパイルされたモジュール API=20060613、debug=0、thread-safety=1nこれらのオプションは、 「matchn in Unknown on line 0」のようなプロンプトは、コンパイル中に使用されたソース コードのバージョンが PHP アプリケーションと一致していないことを意味します (不一致がある場合、完全に一致するバージョンは必要ありません)。
4. 拡張機能を作成するときに他の DLL が参照されていますか? この問題の原因の詳細については、次を参照してください:
http://www.guyzyl.com/post-37.html