ホームページ  >  記事  >  バックエンド開発  >  VS2015 (vs14) で PHP7 拡張機能を開発する方法

VS2015 (vs14) で PHP7 拡張機能を開発する方法

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-06-22 09:18:141968ブラウズ

この記事では、VS2015 (vs14) を使用して PHP7 拡張機能を開発する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

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 をインストールします

VS2015 (vs14) で PHP7 拡張機能を開発する方法

ネットワークからインストール

VS2015 (vs14) で PHP7 拡張機能を開発する方法

##C ドライブはデフォルトでインストールされます

VS2015 (vs14) で PHP7 拡張機能を開発する方法

キャッシュはご自由にダウンロードしてください。インストール後は忘れずに削除してください。私はデスクトップに置きました。

VS2015 (vs14) で PHP7 拡張機能を開発する方法

VS2015 (vs14) で PHP7 拡張機能を開発する方法

中国では、 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

VS2015 (vs14) で PHP7 拡張機能を開発する方法

これを 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 を表します。拡大。

VS2015 (vs14) で PHP7 拡張機能を開発する方法

E:\vs_c \test\phpext\php-7.0.5-src\ext を開くと、テスト フォルダーが表示されます。これが拡張機能です。

4. VS を開き、[ファイル] - [新規] - [既存のコードからディレクトリを作成] を選択します。

VS2015 (vs14) で PHP7 拡張機能を開発する方法

C を選択します

VS2015 (vs14) で PHP7 拡張機能を開発する方法

ここで php 拡張機能フォルダーのパスを選択し、プロジェクトに名前を付けます

VS2015 (vs14) で PHP7 拡張機能を開発する方法

「Visual Studio を使用する」を選択し、プロジェクトの種類「ダイナミック リンク ライブラリ」を選択します。 (DLL) プロジェクト」は、完了するまでデフォルトで次のステップに進みます。

VS2015 (vs14) で PHP7 拡張機能を開発する方法

#5. 初めて開くとエラーがたくさん出てきますので、プロジェクトの設定を始めましょう。

VS2015 (vs14) で PHP7 拡張機能を開発する方法

まず、プロジェクト ソリューション構成をリリースに変更します。

VS2015 (vs14) で PHP7 拡張機能を開発する方法

プロジェクト プロパティを右クリックし、[C/C]、[全般] の順にクリックします。 、追加のインクルード ディレクトリ、

VS2015 (vs14) で PHP7 拡張機能を開発する方法

# を編集し、次の PHP ソース ディレクトリを追加します (実際のディレクトリは開発者自身のディレクトリに従います):

E: \vs_c \test\phpext\php-7.0.5-src

E:\vs_c \test\phpext\php-7.0.5-src\main

E:\vs_c \test \phpext\ php-7.0.5-src\TSRM

E:\vs_c \test\phpext\php-7.0.5-src\Zend

プロジェクト プロパティを右クリックし、C/ C、プリプロセッサ、プリプロセッサ定義を編集し、次の変数を追加します:

ZEND_DEBUG=0

PHP_EXTENSION

PHP_WIN32

ZEND_WIN32

HAVE_

TEST=1 (赤い部分は拡張機能名に変更する必要があります。拡張機能名に変更しないとphpが認識しません)

COMPILE_DL_

TEST (ここの赤い部分は拡張機能名に変更する必要があります。拡張機能名に変更しないと PHP が認識しません)

ZTS (この変数を追加するとスレッド セーフがオンになり、追加しないとスレッド セーフがオフになります。この変数を追加するかどうかは、コンパイルした PHP がスレッド セーフであるかどうかに基づいて判断できます。 ps: 応答せずに損失を被りました。 .PHP は拡張子を認識しません)

VS2015 (vs14) で PHP7 拡張機能を開発する方法

ソリューションを生成します。エラー メッセージには、「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 に変更します


ソリューションを生成するには、プロジェクト ルート ディレクトリの Release フォルダーで独自の php 拡張機能 phptest.dll を見つけ、それを php の ext フォルダーにコピーし、php.ini で構成します。

extension=phptest.dll

IIS を再起動し、新しいサイトを作成し、その中に新しい test.php ファイルを作成します

<?php 
echo test_echo("123");

実行して結果を取得します:

VS2015 (vs14) で PHP7 拡張機能を開発する方法##この test_echo 関数は独自のカスタム関数であり、必要に応じて独自の拡張機能を開発して PHP のパフォーマンスを向上させることもできます。

推奨学習:

php ビデオ チュートリアル

以上がVS2015 (vs14) で PHP7 拡張機能を開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。