ホームページ  >  記事  >  バックエンド開発  >  C++ を使用して PHP7/8 拡張機能を開発し、他の拡張機能と対話する方法

C++ を使用して PHP7/8 拡張機能を開発し、他の拡張機能と対話する方法

WBOY
WBOYオリジナル
2023-09-09 18:45:321536ブラウズ

C++ を使用して PHP7/8 拡張機能を開発し、他の拡張機能と対話する方法

C を使用して PHP7/8 拡張機能を開発し、他の拡張機能と対話する方法

はじめに:

PHP は広く使用されているサーバーサイド スクリプトです。言語、PHP 拡張機能を開発することで、PHP にいくつかのカスタマイズされた関数や機能を追加できます。この記事では、C を使用して PHP7/8 拡張機能を開発する方法を紹介し、他の拡張機能と対話する方法を示します。

1. 準備:

開始する前に、PHP7/8 開発環境がセットアップされていることと、C プログラミングの一定の知識があることを確認してください。

2. 拡張機能の作成:

  1. 拡張機能フォルダーの作成:

まず、拡張機能のソース コードを保存するフォルダーを作成する必要があります。拡大。コマンド ラインで次のコマンドを実行します。

mkdir myextension
cd myextension
  1. 拡張エントリ ファイルを作成します。

myextension フォルダーに拡張エントリ ファイルとして myextension.cpp という名前のファイルを作成します。 。このファイルには、拡張機能の基本的な構造と機能を記述します。

myextension.cpp サンプル コードは次のとおりです。

#include "php_myextension.h"

zend_function_entry myextension_functions[] = {
    PHP_FE(myextension_hello, NULL)
    {NULL, NULL, NULL}
};

zend_module_entry myextension_module_entry = {
    STANDARD_MODULE_HEADER,
    "myextension",
    myextension_functions,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    PHP_MYEXTENSION_VERSION,
    STANDARD_MODULE_PROPERTIES
};

#ifdef COMPILE_DL_MYEXTENSION
#ifdef ZTS
ZEND_TSRMLS_CACHE_DEFINE()
#endif
ZEND_GET_MODULE(myextension)
#endif

PHP_FUNCTION(myextension_hello) {
    php_printf("Hello from myextension!");
}
  1. 拡張機能構成ファイルを作成します。

myextension フォルダ 拡張コンパイル オプションの設定に使用されるファイル。

config.m4 サンプル コードは次のとおりです。

PHP_ARG_ENABLE(myextension, whether to enable myextension support,
    [ --enable-myextension   Enable myextension support])

if test "$PHP_MYEXTENSION" = "yes"; then
    AC_DEFINE(PHP_MYEXTENSION_ENABLED, 1, [Whether myextension support is enabled])
    PHP_NEW_EXTENSION(myextension, myextension.cpp, $ext_shared)
fi

PHP_SUBST(MYEXTENSION_SHARED_LIBADD)
  1. 拡張ヘッダー ファイルを作成します。

myextension フォルダ 拡張関数やマクロを定義するファイルです。

php_myextension.h サンプル コードは次のとおりです。

#ifndef PHP_MYEXTENSION_H
#define PHP_MYEXTENSION_H

extern zend_module_entry myextension_module_entry;
#define phpext_myextension_ptr &myextension_module_entry

#define PHP_MYEXTENSION_VERSION "1.0.0"

PHP_FUNCTION(myextension_hello);

#endif
  1. 拡張 php.ini 構成ファイルを書き込みます。

PHP で名前を作成します。拡張ディレクトリ ファイル myextension.ini は、myextension 拡張機能の動作を設定するために使用されます。

Myextension.ini サンプル コードは次のとおりです:

extension=myextension.so
  1. 拡張機能をコンパイルしてインストールします:

次に、拡張機能をコンパイルしてインストールする必要があります。 。コマンドラインで次のコマンドを実行します:

phpize
./configure --enable-myextension
make
sudo make install

うまくいけば、コンパイルが完了すると myextension.so という名前の拡張ファイルが生成されるので、そのファイルを PHP の拡張ディレクトリにコピーして追加します。 php.ini ファイル内の拡張子を有効にします。

3. 他の拡張機能と対話する:

拡張機能の開発が完了したら、拡張機能が提供する関数やグローバル変数を通じて他の拡張機能と対話できます。次に、zlib 拡張機能を操作する例を示します。

  1. myextension.cpp ファイルを変更します。

ファイルの先頭にヘッダー ファイル参照を追加します。

#include <zlib.h>

At myextension_hello 関数で zlib 関数を呼び出します:

PHP_FUNCTION(myextension_hello) {
    unsigned long sourceLen = 200;
    char source[] = "Hello from myextension!";
    unsigned long destLen = compressBound(sourceLen);
    char* dest = (char*)malloc(destLen);

    compress((Bytef*)dest, &destLen, (const Bytef*)source, sourceLen);

    php_printf("Compressed string: %s", dest);
    free(dest);
}
  1. 拡張機能をコンパイルしてインストールします:

前の手順に従ってコンパイルしてインストールします。

  1. テスト拡張子:

test.php という名前のファイルを作成し、次のコードを記述します:

<?php

echo myextension_hello();

?>

コマンド ラインで次のコマンドを実行します。

php test.php

すべてが正常であれば、次の出力が表示されます。

Compressed string: H4sIAAAAAAAEAEvNLE3WcuhKS0xOLC8tSizJzM8PKS4tKEpPzs8rSCpNzS1OL8pPogXQA

4. 概要:

この記事の導入を通じて、C の使用方法を学習する必要があります。 PHP7/8 拡張機能を開発し、他の拡張機能と対話します。独自の PHP 拡張機能を開発すると、アプリケーションにさらに多くの機能を提供できます。この記事がお役に立てば幸いです。

以上がC++ を使用して PHP7/8 拡張機能を開発し、他の拡張機能と対話する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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