ホームページ >バックエンド開発 >PHPの問題 >PHPで拡張機能を初期化するにはどうすればよいですか?

PHPで拡張機能を初期化するにはどうすればよいですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-07-01 13:19:282751ブラウズ

PHP 初期化拡張方法: まず [php_hello.h] のユーザー空間関数近くのプロトタイプ宣言を変更し、次に [hello.c] ファイルを変更し、ファイルの先頭に [# を追加します。 hello.c] include]; 最後に、INI の値を使用するように [hello_world] を変更します。

PHPで拡張機能を初期化するにはどうすればよいですか?

PHP で拡張機能を初期化する方法:

php を使用して拡張機能の構成を初期化します。 ini


Zend エンジンには、ini 値を管理する 2 つの方法が用意されています。

php.ini で拡張機能の値 hello.greeting を定義するとします。これには、hell_world() で使用される値が保持されます。関数 挨拶文字列。 hello.cphp_hello.h にコードを追加し、hell_module_entry 構造にいくつかの重要な変更を加える必要があります。

関連する学習の推奨事項: PHP プログラミングの入門から熟練度まで

1. 最初のステップ: php_hello.h を変更します。ユーザー空間関数

 PHP_MINIT_FUNCTION(hello);
PHP_MSHUTDOWN_FUNCTION(hello);// 初始化关键点
PHP_FUNCTION(hello_world);// 其它通用
PHP_FUNCTION(hello_long);

2 のプロトタイプ宣言に近い手順 2: hello.c ファイル

を変更して ## を削除します現在のバージョンでは #hello_module_entry これを次のリストに置き換えます:

zend_module_entry hello_module_entry = {
     #if ZEND_MODULE_API_NO >= 20010901
          STRANDARD_MODULE_HEADER,
     #endif
          PHP_HELLO_WORLD_EXTENAME,
          hello_functions,
          PHP_MINIT(hello),
          PHP_MSHUTDOWN(hello),
          NULL,NULL,NULL,
     #if ZEND_MODULE_API_NO >= 20010901
          PHP_HELLO_WORLD_VERSION,
     #endif
          STANDARD_MODULE_PROERTIES
}
 
PHP_INI_BEGIN()
PHP_INI_ENTRY("hello.greeting","hello world",PHP_INI_ALL,NULL)
PHP_INI_END()
 
PHP_MINIT_FUNCTION(hello)
{
     REGISTER_INI_ENTRIES();
     return SUCCESS;
}
 
PHP_MSHUTDOWN_FUNCTION(hello)
{
     UNREGISTER_INI_ENTRIES();
     return SUCCESS;
}

3. これで、ファイルの先頭にある

#include のみが必要になります hello.c INI をサポートする正しいヘッダー ファイルをアクティブ化できるように、 の横に #include を追加します。

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "php.h"
#include "php_ini.h"
#include "php_hello.h"

4. 最後に、

hello_world を変更して、INI の値を使用できます:

PHP_FUNCTION(hello_world)
{
     RETURN_STRING(INI_STR("hello.greeting"),1);
}

ただし、

INI_STR() から返された値をコピーする必要があります。これは、PHP 変数スタックに入る前は静的文字列であるためです。実際、返された文字列を変更しようとすると、PHP 実行環境が不安定になったり、クラッシュしたりすることがあります。

概要:

  • は、実際には

    INI_STR() を使用して hello.greeting を取得しています。エントリ 現在の文字列。

  • 他のパラメータを取得したい場合は、

    INI_INT などの関数を使用できます。設定パラメータが異なるため、ini_set のような関数が発生する可能性があります。 使いにくい。

以上がPHPで拡張機能を初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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