この記事では、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 をインストールします
ネットワークからインストール
##C ドライブはデフォルトでインストールされますキャッシュはご自由にダウンロードしてください。インストール後は忘れずに削除してください。私はデスクトップに置きました。 中国では、 http://mirrors.163.com を選択し、次のステップを最後まで実行してください。 2. 私の php ソース コード ディレクトリ (E:\vs_c \test\phpext\php-7.0.5-src、これは以下でソース コード ディレクトリを表すために使用されます) を見つけて、E を開きます。 \vs_c \test\phpext \php-7.0.5-src\ext\ext_skel_win32.php これを cygwin のインストール ディレクトリに変更します。私のディレクトリは C ドライブなので、変更する必要はありません。 3. cmd を実行し、「E:\vs_c \test\phpext\php-7.0.5-src\ext\」と入力し、php.exe ext_skel_win32.php --extname=test を実行します。ここで、test は php を表します。拡大。 E:\vs_c \test\phpext\php-7.0.5-src\ext を開くと、テスト フォルダーが表示されます。これが拡張機能です。 4. VS を開き、[ファイル] - [新規] - [既存のコードからディレクトリを作成] を選択します。 C を選択します ここで php 拡張機能フォルダーのパスを選択し、プロジェクトに名前を付けます 「Visual Studio を使用する」を選択し、プロジェクトの種類「ダイナミック リンク ライブラリ」を選択します。 (DLL) プロジェクト」は、完了するまでデフォルトで次のステップに進みます。 #5. 初めて開くとエラーがたくさん出てきますので、プロジェクトの設定を始めましょう。 まず、プロジェクト ソリューション構成をリリースに変更します。 プロジェクト プロパティを右クリックし、[C/C]、[全般] の順にクリックします。 、追加のインクルード ディレクトリ、 # を編集し、次の PHP ソース ディレクトリを追加します (実際のディレクトリは開発者自身のディレクトリに従います): E: \vs_c \test\phpext\php-7.0.5-srcE:\vs_c \test\phpext\php-7.0.5-src\mainE:\vs_c \test \phpext\ php-7.0.5-src\TSRME:\vs_c \test\phpext\php-7.0.5-src\Zendプロジェクト プロパティを右クリックし、C/ C、プリプロセッサ、プリプロセッサ定義を編集し、次の変数を追加します: ZEND_DEBUG=0PHP_EXTENSIONPHP_WIN32ZEND_WIN32 HAVE_
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"
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); }
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[] */ };
<?php echo test_echo("123");
##この test_echo 関数は独自のカスタム関数であり、必要に応じて独自の拡張機能を開発して PHP のパフォーマンスを向上させることもできます。
推奨学習:
php ビデオ チュートリアル以上がVS2015 (vs14) で PHP7 拡張機能を開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。