您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

php如何发布扩展信息

2025/2/19 3:01:46发布30次查看
发布扩展信息扩展可以发布 phpinfo() 或反射api要求的信息。我们一起来看一下。
本章不会太长,因为真的很简单。
相关学习推荐:php编程从入门到精通
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 "<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 。或者更抽象的表述就是  b612ffdb105459601c5cdc85c59b0243 - iphp --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 。或者更抽象的表述就是  b612ffdb105459601c5cdc85c59b0243 - iphp --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如何发布扩展信息的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product