溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用php發(fā)布擴展信息

發(fā)布時間:2020-07-30 10:32:38 來源:億速云 閱讀:163 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關如何使用php發(fā)布擴展信息,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

                                               

發(fā)布擴展信息

擴展可以發(fā)布 phpinfo() 或反射API要求的信息。我們一起來看一下。

本章不會太長,因為真的很簡單。


MINFO( ) 掛鉤

如果聲明了,一切都在聲明的 MINFO() 掛鉤中進行。如果未聲明,則引擎將運行默認功能以打印有關擴展名的信息。該功能只會打印擴展程序的版本以及最終聲明的 INI條目 。

如果要加入此過程,則必須在擴展結構中聲明一個 MINFO() hook。

注意

一切都在 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 "<h4>" PIB_TXT "</h4>"

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發(fā)布擴展信息

你要做的主要是處理 php_info_print_*() API,它允許你將信息打印到生成的輸出流中。如果你想要打印一些原始的信息,一個簡單的 php_write() 就足夠了。php_write() 就是把你傳入的信息當作 SAPI 輸出流的一個參數, 而 php_info_print_*() API 也是一樣,但是之前會被按照要求格式化,如果想要 HTML 格式,則會使用 HTML 的 table-tr-td 標簽,如果不需要格式化成 HTML 的話,就會簡單的用空格間隔。

如你所見,你必須 include ext/standard/info.h 以引入 php_info_print_*() API ,并且你還需要引入 php/main/SAPI.h 來獲得 sapi_module 符號。這個符號是全局的,它代表了當前 PHP 進程所使用的 SAPIphpinfo_as_text 字段告訴你,如果你準備寫入一個類似比如 php-fpm 的 “Web” 的 SAPI 或者寫入一個類似  php-cli 的 “text” 的(SAPI)。

能觸發(fā)你的 MINFO() 鉤子的是下面這些:

  • 調用用戶端的 phpinfo() 函數
  • php -i 、 php-cgi -iphp-fpm -i 。或者更抽象的表述就是  <SAPI_binary> - i
  • php --ri 或者用戶端的 ReflectionExtension::info()

注意:

要留意輸出的格式。如果你需要在 text 和 HTML 之間轉換格式,就研究一下 sapi_module.phpinfo_as_text 。你無法得知在用戶端擴展的信息是被如何調用的。

如果你要展示你的 INI 設置,只要在你的 MINFO() 中調用 DISPLAY_INI_ENTRIES() 宏即可。這個宏的解析看這里  display_ini_entries().

能觸發(fā)你的 MINFO() 鉤子的是下面這些:

  • 調用用戶端的 phpinfo() 函數
  • php -i 、 php-cgi -iphp-fpm -i 。或者更抽象的表述就是  <SAPI_binary> - i
  • php --ri 或者用戶端的 ReflectionExtension::info()

注意:

要留意輸出的格式。如果你需要在 text 和 HTML 之間轉換格式,就研究一下 sapi_module.phpinfo_as_text 。你無法得知在用戶端擴展的信息是被如何調用的。

如果你要展示你的 INI 設置,只要在你的 MINFO() 中調用 DISPLAY_INI_ENTRIES() 宏即可。這個宏的解析看這里  display_ini_entries().

關于反射 API 的說明

反射大量使用你的zend_module_entry結構。例如,當你調用ReflectionExtension::getVersion()時,API 只會讀取zend_module_entry結構的版本字段。

與發(fā)現函數相同,你的zend_module_entry具有一個const struct _zend_function_entry * functions成員,該成員用于注冊PHP函數。

基本上,PHP 用戶區(qū)反射 API 只會讀取你的zend_module_entry結構并發(fā)布這些信息。它還可以使用你的module_number來收集在引擎的不同位置注冊的擴展的信息。例如,ReflectionExtension::getINIentries()ReflectionExtension::getClasses()使用了這個。

看完上述內容,你們對如何使用php發(fā)布擴展信息有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI