亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    php如何發(fā)布擴(kuò)展信息

    php如何發(fā)布擴(kuò)展信息

    發(fā)布擴(kuò)展信息

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

    本章不會太長,因?yàn)檎娴暮芎唵巍?/p>

    相關(guān)學(xué)習(xí)推薦:PHP編程從入門到精通

    MINFO( ) 掛鉤

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

    如果要加入此過程,則必須在擴(kuò)展結(jié)構(gòu)中聲明一個(gè) MINFO() hook。

    注意

    一切都在 ext / standard / info.c 中進(jìn)行,您可以閱讀該文件。引擎通過調(diào)用 php_info_print_module() 來打印有關(guān)PHP擴(kuò)展的信息

    下面是一個(gè)簡單的 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 關(guān)閉 */     NULL, /* Request 初始化 */     NULL, /* Request 關(guān)閉 */     PHP_MINFO(pib), /* Module information */     "0.1", /* 擴(kuò)展的版本號寫在這里 */     STANDARD_MODULE_PROPERTIES };

    php如何發(fā)布擴(kuò)展信息

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

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

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

    • 調(diào)用用戶端的 phpinfo() 函數(shù)
    • php -i 、 php-cgi -i 、 php-fpm -i ?;蛘吒橄蟮谋硎鼍褪? <SAPI_binary> - i
    • php --ri 或者用戶端的 ReflectionExtension::info()

    注意:

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

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

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

    • 調(diào)用用戶端的 phpinfo() 函數(shù)
    • php -i 、 php-cgi -i 、 php-fpm -i ?;蛘吒橄蟮谋硎鼍褪? <SAPI_binary> - i
    • php --ri 或者用戶端的 ReflectionExtension::info()

    注意:

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

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

    關(guān)于反射 API 的說明

    反射大量使用你的zend_module_entry結(jié)構(gòu)。例如,當(dāng)你調(diào)用ReflectionExtension::getVersion()時(shí),API 只會讀取zend_module_entry結(jié)構(gòu)的版本字段。

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

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

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號