首頁  >  文章  >  後端開發  >  php如何發布擴充訊息

php如何發布擴充訊息

coldplay.xixi
coldplay.xixi轉載
2020-07-28 16:53:481746瀏覽

php如何發布擴充訊息

發佈擴充資訊

#即可發布時 phpinfo()

##發佈擴充資訊

#擴充可以發佈
phpinfo()

##「發佈擴充資料

#可發布
phpinfo()

#phpinfo()

或反射API要求的資訊。我們一起來看一下。 本章不會太長,因為真的很簡單。

相關學習推薦:

PHP程式設計從入門到精通

#MINFO( ) 掛鉤

如果聲明了,一切都在宣告的php如何發布擴充訊息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 "<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 的話,就會簡單的用空格間隔。 如你所見,你必須include

ext/standard/info.h

以引入php_info_print_*() API ,並且你還需要引入

php /main/SAPI.h
    來獲得
  • sapi_module 符號。這個符號是全域的,它代表了目前 PHP 流程所使用的 SAPI
  •  。
  • phpinfo_as_text 欄位告訴你,如果你準備寫入一個類似例如php-fpm 的「Web」 的SAPI 或寫入一個類似 php-cli 的“ text” 的(SAPI)。 能觸發你的MINFO()
  • 鉤子的是下面這些:
  • 呼叫用戶端的phpinfo() 函數
php -i

php-cgi -i

php-fpm -i 。或者更抽象的陳述是 

 - i

php --ri 或使用者端的 ReflectionExtension::info()

    注意:
  • 要留意輸出的格式。如果你需要在 text 和 HTML 之間轉換格式,就研究一下 sapi_module.phpinfo_as_text
  • 。你無法得知在用戶端擴展的資訊是被如何呼叫的。
  • 如果你要展示你的 INI 設置,只要在你的 MINFO() 中呼叫 DISPLAY_INI_ENTRIES() 巨集即可。這個巨集的解析看這裡 display_ini_entries().能觸發你的
  • MINFO()
  • 鉤子的是下面這些:##呼叫用戶端的 phpinfo() 函數
php -i

php-cgi -i

php-fpm -i 。或者更抽象的陳述是 

 - 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###結構的版本欄位。 ######與發現函數相同,你的###zend_module_entry###具有一個###const struct _zend_function_entry * functions###成員,該成員用於註冊PHP函數。 ###

基本上,PHP 使用者區反射 API 只會讀取你的zend_module_entry結構並發布這些資訊。它也可以使用你的module_number來收集在引擎的不同位置註冊的擴充功能的資訊。例如,ReflectionExtension::getINIentries() 或 ReflectionExtension::getClasses()使用了這個。

以上是php如何發布擴充訊息的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除
上一篇:PHP之鉤子下一篇:PHP之鉤子