php如何发布扩展信息
发布扩展信息
扩展可以发布 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
。或者更抽象的表述就是<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().
关于反射 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中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

CakePHP 是 PHP 的开源框架。它的目的是使应用程序的开发、部署和维护变得更加容易。 CakePHP 基于类似 MVC 的架构,功能强大且易于掌握。模型、视图和控制器 gu

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写
