php如何发布扩展信息

php如何发布扩展信息

发布扩展信息

扩展可以发布 phpinfo() 或反射API要求的信息。我们一起来看一下。

本章不会太长,因为真的很简单。

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
};

../../_images/php_minfo.png

你要做的主要是处理 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 进程所使用的 SAPIphpinfo_as_text 字段告诉你,如果你准备写入一个类似比如 php-fpm 的 “Web” 的 SAPI 或者写入一个类似 php-cli 的 “text” 的(SAPI)。

能触发你的 MINFO() 钩子的是下面这些:

  • 调用用户端的 phpinfo() 函数
  • php -iphp-cgi -iphp-fpm -i 。或者更抽象的表述就是 <SAPI_binary> - i
  • php --ri 或者用户端的 ReflectionExtension::info()

如果你要展示你的 INI 设置,只要在你的 MINFO() 中调用 DISPLAY_INI_ENTRIES() 宏即可。这个宏的解析看这里 display_ini_entries().

能触发你的 MINFO() 钩子的是下面这些:

  • 调用用户端的 phpinfo() 函数
  • php -iphp-cgi -iphp-fpm -i 。或者更抽象的表述就是 <SAPI_binary> - i
  • php --ri 或者用户端的 ReflectionExtension::info()

如果你要展示你的 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如何发布扩展信息的文章就分享到这,如果对你有帮助欢迎继续关注我们哦

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/40514.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
php学习php学习订阅用户
上一篇 2022年6月13日 23:28
下一篇 2022年6月13日 23:29

相关推荐

  • PHP微信开发:如何实现客服聊天窗口管理

    微信是目前全球用户规模最大的社交平台之一,随着移动互联网的普及,越来越多的企业开始意识到微信营销的重要性。在进行微信营销时,客服服务是至关重要的一环。为了更好地管理客服聊天窗口,我们可以借助PHP语言进…

    2023年5月18日
    01
  • 掌握php短信接口代码

    本文实例为大家分享了几个常用的php短信接口代码,供大家参考,具体内容如下1. 短信调用class <?php /** * User: Administrator * Date: 2016/5/8 0008 * Time: 下午 2:36 */ class Sms{ //Luosimao api key pri…

    2022年6月17日
    0138
  • PHP与区块链的集成

    随着区块链技术的发展和应用场景的扩大,越来越多的开发者开始尝试将区块链与传统的编程语言集成,以期能够更好地实现区块链的各种功能和应用。在众多的编程语言中,PHP作为一种常用的开发语言,也在不断地尝试着与…

    2023年5月19日
    033
  • PHP中如何使用正则表达式进行数据验证。

    在 PHP 编程中,数据验证是一个非常重要的任务。当我们接收外部输入数据(例如用户的表单提交)时,我们需要在使用这些数据之前,对其进行验证,确保其格式正确并符合我们的要求。其中一种非常实用的验证方式就是使…

    2023年5月22日
    02
  • 关于二进制的原码、补码、反码详解

    说明:在计算机中cpu操作的是补码,原因就是整数分负数和正数 二进制的最大位:0是正数,1是负数 正数的三码:都一样 负数的反码:按位取反,符号位不变。 负数的补码:在反码基础加1 $a & $b: $a | $b: ~ -$…

    2017年12月11日 PHP自学教程
    0282
  • 使用PHP开发直播功能的详细教程。

    随着网络技术的不断发展,直播功能正在变得越来越流行。在这样一个背景下,越来越多的开发者正在使用PHP语言开发直播功能,以满足市场需求。本篇文章将针对如何使用PHP语言开发直播功能,提供一个详细的教程,帮助…

    2023年5月30日
    042
  • PHP的cookie技术详解

    Cookie介绍 Cookie是客户端技术,当客户端 请求服务器的时候,随身携带数据过去 例如:我们去超市购物,买很多东西,超市会给我们办会员卡,会员卡就会保存我们购买的商品信息,以后我们只需要拿着会员卡就可以 Coo…

    2018年9月13日 PHP自学教程
    0265
  • PHP实现MongoDB数据库主从复制的方法。

    在现代的网络应用程序中,数据处理和管理是至关重要的任务。随着Web应用程序变得越来越复杂,需要处理海量数据,存储和处理这些数据的数据库也越来越多了。MongoDB是一种NoSQL数据库,在Web应用程序中被广泛使用。…

    2023年5月21日
    00

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息