拡張機能は、phpinfo()
またはリフレクション API に必要な情報を公開できます。一緒に見てみましょう。
この章は非常に簡単なので、それほど長くはなりません。
関連する学習の推奨事項: PHP プログラミングの入門から熟練度まで
宣言されれば、すべてが実行されます。宣言された MINFO()
フック内にあります。宣言されていない場合、エンジンはデフォルトの関数を実行して、拡張機能に関する情報を出力します。この関数は、拡張機能のバージョンと最終的に宣言された INI エントリのみを出力します。
このプロセスに参加したい場合は、拡張構造内で MINFO()
フックを宣言する必要があります。
すべての処理は ext/standard/info.c で行われ、これを読むことができます。エンジンは、php_info_print_module()
を呼び出して、PHP 拡張機能に関する情報を出力します。以下は、単純な MINFO()
の場合です:
#include "php/main/SAPI.h" #include "ext/standard/info.h" #define PIB_TXT "PHPInternalsBook Authors" #define PIB_HTML "<h3>" PIB_TXT "</h3>" PHP_MINFO_FUNCTION(pib) { time_t t; char cur_time[32]; time(&t); php_asctime_r(localtime(&t), cur_time); php_info_print_table_start(); php_info_print_table_colspan_header(2, "PHPInternalsBook"); php_info_print_table_row(2, "Current time", cur_time); php_info_print_table_end(); php_info_print_box_start(0); if (!sapi_module.phpinfo_as_text) { php_write(PIB_HTML, strlen(PIB_HTML)); } else { php_write(PIB_TXT, strlen(PIB_TXT)); } php_info_print_box_end(); } zend_module_entry pib_module_entry = { STANDARD_MODULE_HEADER, "pib", NULL, /* Function 入口 */ NULL, /* Module 初始化 */ NULL, /* Module 关闭 */ NULL, /* Request 初始化 */ NULL, /* Request 关闭 */ PHP_MINFO(pib), /* Module information */ "0.1", /* 扩展的版本号写在这里 */ STANDARD_MODULE_PROPERTIES };主に行う必要があるのは、生成された出力ストリームに情報を出力できるようにする
php_info_print_*() API を処理することです。生の情報を出力したい場合は、単純な
php_write() で十分です。
php_write() は、渡した情報を SAPI 出力ストリームのパラメーターとして扱います。
php_info_print_*() API は同じですが、以前の要求に従ってフォーマットされます。 HTML 形式にしたい場合は HTML の
table-tr-td タグを使用しますが、HTML 形式にする必要がない場合はスペースで区切ります。
php_info_print_*() API を導入するには ext/standard/info.h をインクルードする必要があり、さらに # もインクルードする必要があります。 ##php /main/SAPI.h
を実行して、sapi_module シンボルを取得します。このシンボルはグローバルであり、現在の PHP プロセスで使用される SAPI
を表します。 phpinfo_as_text フィールドは、php-fpm
のような「Web」SAPI を記述するか、php-cli テキストのような「Web」を記述するかを示します。 (SAPI)。
フックをトリガーできるものは次のとおりです:
php-cgi -i
、php-fpm -i
。あるいは、より抽象的な表現は <sapi_binary> - i</sapi_binary>
##php --ri
出力形式に注意してください。テキストと HTML の間で変換する必要がある場合は、でsapi_module.phpinfo_as_text
を調べてください。クライアント側の拡張情報がどのように呼び出されるのかを知る方法はありません。MINFO()
INI 設定を表示したい場合は、
DISPLAY_INI_ENTRIES() マクロを呼び出すだけです。このマクロの分析については、display_ini_entries() を参照してください。
MINFO()
クライアントの呼び出し
php -i、
php-fpm -i。あるいは、より抽象的な表現は
##php --ri
またはクライアントの
注: sapi_module.phpinfo_as_textDISPLAY_INI_ENTRIES()を調べてください。クライアント側の拡張情報がどのように呼び出されるのかを知る方法はありません。
で
INI 設定を表示したい場合は、
MINFO()
マクロを呼び出すだけです。このマクロの分析については、display_ini_entries() を参照してください。リフレクション API の説明
リフレクションは、
を呼び出すと、API は zend_module_entry
構造体のバージョン フィールドのみを読み取ります。 関数の検出と同様に、
zend_module_entry
には
メンバーがあり、これは PHP 関数の登録に使用されます。 <p>基本的に、PHP ユーザーランド リフレクション API は、<code>zend_module_entry
構造を読み取り、その情報を公開するだけです。 module_number
を使用して、エンジン内のさまざまな場所に登録されている拡張機能に関する情報を収集することもできます。たとえば、ReflectionExtension::getINIentries()
または ReflectionExtension::getClasses()
がこれを使用します。
以上がPHPで拡張情報を公開する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。