您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何使用php發布擴展信息,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
擴展可以發布 phpinfo()
或反射API要求的信息。我們一起來看一下。
本章不會太長,因為真的很簡單。
如果聲明了,一切都在聲明的 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_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
。或者更抽象的表述就是 <SAPI_binary> - 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
。或者更抽象的表述就是 <SAPI_binary> - i
php --ri
或者用戶端的 ReflectionExtension::info()
注意:
要留意輸出的格式。如果你需要在 text 和 HTML 之間轉換格式,就研究一下
sapi_module.phpinfo_as_text
。你無法得知在用戶端擴展的信息是被如何調用的。
如果你要展示你的 INI 設置,只要在你的 MINFO()
中調用 DISPLAY_INI_ENTRIES()
宏即可。這個宏的解析看這里 display_ini_entries().
反射大量使用你的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發布擴展信息有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。