ホームページ  >  記事  >  バックエンド開発  >  PHPで拡張情報を公開する方法

PHPで拡張情報を公開する方法

coldplay.xixi
coldplay.xixi転載
2020-07-28 16:53:481750ブラウズ

PHPで拡張情報を公開する方法

拡張情報の公開

拡張機能は、phpinfo() またはリフレクション API に必要な情報を公開できます。一緒に見てみましょう。

この章は非常に簡単なので、それほど長くはなりません。

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

MINFO() フック

宣言されれば、すべてが実行されます。宣言された MINFO() フック内にあります。宣言されていない場合、エンジンはデフォルトの関数を実行して、拡張機能に関する情報を出力します。この関数は、拡張機能のバージョンと最終的に宣言された INI エントリのみを出力します。

このプロセスに参加したい場合は、拡張構造内で MINFO() フックを宣言する必要があります。

NOTE

すべての処理は 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で拡張情報を公開する方法

主に行う必要があるのは、生成された出力ストリームに情報を出力できるようにする

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)。

MINFO()

フックをトリガーできるものは次のとおりです:

クライアントの
    phpinfo()
  • 関数を呼び出します
  • php -i
  • php-cgi -iphp-fpm -i。あるいは、より抽象的な表現は <sapi_binary> - i</sapi_binary>##php --ri
  • またはクライアントの
  • ReflectionExtension::info()
  • 注:
出力形式に注意してください。テキストと HTML の間で変換する必要がある場合は、

sapi_module.phpinfo_as_text

を調べてください。クライアント側の拡張情報がどのように呼び出されるのかを知る方法はありません。

INI 設定を表示したい場合は、

MINFO()

DISPLAY_INI_ENTRIES() マクロを呼び出すだけです。このマクロの分析については、display_ini_entries() を参照してください。MINFO()

をトリガーできるフックは次のとおりです。

クライアントの呼び出し

phpinfo()
    関数
  • php -i
  • php-cgi -iphp-fpm -i。あるいは、より抽象的な表現は - i##php --ri またはクライアントの
  • ReflectionExtension::info()
  • 注:
出力形式に注意してください。テキストと HTML の間で変換する必要がある場合は、
sapi_module.phpinfo_as_text

を調べてください。クライアント側の拡張情報がどのように呼び出されるのかを知る方法はありません。

INI 設定を表示したい場合は、MINFO()

DISPLAY_INI_ENTRIES()

マクロを呼び出すだけです。このマクロの分析については、display_ini_entries() を参照してください。リフレクション API の説明リフレクションは、

zend_module_entry

構造体を広範囲に使用します。たとえば、

ReflectionExtension::getVersion()

を呼び出すと、API は zend_module_entry 構造体のバージョン フィールドのみを読み取ります。 関数の検出と同様に、zend_module_entry には

const struct _zend_function_entry *functions

メンバーがあり、これは PHP 関数の登録に使用されます。 <p>基本的に、PHP ユーザーランド リフレクション API は、<code>zend_module_entry 構造を読み取り、その情報を公開するだけです。 module_number を使用して、エンジン内のさまざまな場所に登録されている拡張機能に関する情報を収集することもできます。たとえば、ReflectionExtension::getINIentries() または ReflectionExtension::getClasses() がこれを使用します。

以上がPHPで拡張情報を公開する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
前の記事:PHPフック次の記事:PHPフック