この記事では、VS2015 (vs14) を使用して PHP7 拡張機能を開発する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
開発前の準備作業:
VS (私は2013を使用)
Cygwin (ダウンロードアドレス: http://www.cygwin) .com/)
IIS7.5 の PHP 実行環境 (テストに使用)
php コンパイル済みプログラムとプリコンパイル済みソース コードを備えており、最新バージョン 7.0.5 (ダウンロード アドレス: http://windows.php.net/download#php-7.0)
コンパイルされたプログラムのパス: E:\vs_c \test\phpext\php-7.0.5-src
コンパイル前のソース コード パス: E:\vs_c \test\phpext\php-7.0.5-nts-Win32-VC14-x86\
手順:
1. Cygwin をインストールします
ネットワークからインストール
TEST=1 (赤い部分は拡張機能名に変更する必要があります。拡張機能名に変更しないとphpが認識しません)
TEST (ここの赤い部分は拡張機能名に変更する必要があります。拡張機能名に変更しないと PHP が認識しません)
ZTS (この変数を追加するとスレッド セーフがオンになり、追加しないとスレッド セーフがオフになります。この変数を追加するかどうかは、コンパイルした PHP がスレッド セーフであるかどうかに基づいて判断できます。 ps: 応答せずに損失を被りました。 .PHP は拡張子を認識しません)
ソリューションを生成します。エラー メッセージには、「config.w32.h」が見つからないことが示されます。「config.w32.h」を検索します。 h" をソース コード ファイル ディレクトリに移動し、E:\vs_c \test\phpext\php-7.0.5-src\win32\build\ フォルダーで "config.w32.h.in" を見つけてコピーします。ファイルを E:\vs_c \test \phpext\php-7.0.5-src\main\ フォルダーにコピーし、次の ".in"
ソリューションを再度生成すると、エラー メッセージ LNK1120
# が表示されます。 ##エラー 7 エラー LNK1120: 5 つの未解決の外部コマンド E:\vs_c \test\phpext\php-7.0.5-src\ext\test\Release\phptest.dll 1 1 phptestプロジェクトを右クリックプロパティ、コネクタ、入力、追加の依存関係、編集、php5.lib へのパスを入力します (このファイルは、php がコンパイルされた後のプログラム フォルダー、ルート ディレクトリの dev フォルダーにあります) 注: 順序は次のとおりです。拡張機能が php で動作できるようにするため、一致する実行環境は、php 実行環境のコンパイル済みバージョン (php7.0.5 は VC14 によってコンパイルされています) によって異なります。これは、E:\vs_c\test\phpext\php-7.0 の設定です。 .5-src\main\ フォルダー。w32.h ファイルに追加します:#define PHP_COMPILER_ID "VC14"Open E:\vs_c \test\phpext\php-7.0.5-src\ext\test\test.c
PHP_FUNCTION(confirm_test_compiled) { 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, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "test", arg); RETURN_STRINGL(strg, len, 0); }確認_test_compiled を test_echo に変更します。このコードを再度検索します:
const zend_function_entry test_functions[] = { PHP_FE(confirm_test_compiled, NULL) /* For testing, remove later. */ PHP_FE_END /* Must be the last line in test_functions[] */ };内部の確認_test_compiled を test_echo に変更します
<?php echo test_echo("123");実行して結果を取得します:
##この test_echo 関数は独自のカスタム関数であり、必要に応じて独自の拡張機能を開発して PHP のパフォーマンスを向上させることもできます。
推奨学習:
php ビデオ チュートリアル以上がVS2015 (vs14) で PHP7 拡張機能を開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。