php内核介绍及扩展开发指南,4.5. 发布扩展信息

发布扩展信息

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

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

MINFO( ) 挂钩

如果声明了,一切都在声明的 MINFO() 挂钩中进行。如果未声明,则引擎将运行默认功能以打印有关扩展名的信息。该功能只会打印扩展程序的版本以及最终声明的 INI条目 。

如果要加入此过程,则必须在扩展结构中声明一个 MINFO() hook。

注意

下面是一个简单的 MINFO() 案例:

#include "php/main/SAPI.h"

#include "ext/standard/info.h"

#define PIB_TXT "PHPInternalsBook Authors"

#define PIB_HTML "

" PIB_TXT "

"

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

};

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

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

调用用户端的 phpinfo() 函数

php -i 、 php-cgi -i 、 php-fpm -i 。或者更抽象的表述就是   - 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 。或者更抽象的表述就是   - 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()使用了这个。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接

我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2011年度中国地区网络安全威胁大事记

2011年6月28日晚20时左右,新浪微博突然爆发“病毒”,大批用户中招,“中毒”用户点击恶意链接后便并自动关注一位名为hellosamy的用户,之后开始自动转发微博和私信好友来继续传播恶意地址。不少认证用户中招,也导致该“…

ansible模块介绍

ansible 默认提供了很多模块来供我们使用。在 Linux 中,我们可以通过 ansible-doc -l 命令查看到当前ansible 都支持哪些模块,通过 ansible-doc -s 模块名 又可以查看该模块有哪些参数可以使用。 下面介绍比较常用的几个模块 copy模块file模块cron模块gr…

matlab迭代次数,怎么知道程序中的迭代次数呢

function [result,x,y]TS_BS1(num_1,num_2,c_i,d_j,M_i,T)%初始参数设置runcount 0;tabulength 3 num_1;candidate.x round(rand(1,num_1));y zeros(num_1,num_2);sum_d 0;for i 1:num_2sum_d sum_d d_j(i);endalfa 0.9;%初始化禁忌表for i 1:tabulengthtabulist(i)…

使用a标签调用手机系统的一些小技巧(打电话、发短信)

拨打电话&#xff1a; <a href"tel:181181181181">call me!</a> 号码前加“”&#xff0c;表示国际号码 <a href"tel:110">110</a> 发送短信&#xff1a; <a href"sms:123456789">给123456789发短信</a> …

ecshop api.php,api.php

/*** ECSHOP OPEN API统一接口* * 版权所有 2005-2011 商派网络&#xff0c;并保留所有权利。* ecshop.com* ----------------------------------------------------------------------------* 这不是一个自由软件&#xff01;您只能在不用于商业目的的前提下对程序代码进行修改…

Ajax乱码解决方案

2019独角兽企业重金招聘Python工程师标准>>> 方案1: 页面端: <% page language"java" contentType"text/html; charsetgb2312" pageEncoding"gb2312"%> http://www.w3.org/TR/html4/loose.dtd"> Ajax: function ve…

关键词联想关联 php,ECSHOP商品关键词模糊分词搜索插件,商品列表关键字加红功能...

各位ECSHOP网店系统用户大家好&#xff0c;欢迎来到ECSHOP商品关键词模糊分词搜索商品列表关键字加红功能。最近给客户做一个ECSHOP商城&#xff0c;发现ECSHOP的模糊搜索要求太高&#xff0c;需要加入and、空格、加号等&#xff0c;客户搜索的时候不可能这样操作。考虑到工期的…

花里胡哨,不协调统一的界面,正如看到一个穿花里胡哨衣服的人,让人作呕,不想接近。...

2019独角兽企业重金招聘Python工程师标准>>> 花里胡哨&#xff0c;不协调统一的界面&#xff0c;正如看到一个穿花里胡哨衣服的人&#xff0c;让人作呕&#xff0c;不想接近。 不要瞎变。 转载于:https://my.oschina.net/dongming/blog/40569

python全栈学习--day12(函数高级应用-带参数的装饰器,多个装饰器装饰一个函数)...

函数的执行时&#xff0c;*打散 函数的定义时&#xff0c;*聚合 from functools import wrapsdef wrapper(f):wraps(f)def inner(*args,**kwargs):执行函数之前的相关操作ret f(*args,**kwargs)执行函数之后的相关操作return retreturn inner wrapper def func1(*args):print…

Java学习总结 16个亮点

1.八大基本数据类型 byte(字节型8) int(整型;32;程序中一般默认为int型) short(短整型 16) long(长整型 32) float(浮点型 32) double(双精度浮点型 64) char(字符型 16) boolean(布尔型 只有true和false) 小范围内的整数类型可以通过赋值转化成大范围的数据类型.而大…

PHP聊天记录内啥,PHP的PSR系列轨范都有啥内容

PHP的PSR系列规范都有啥内容PSR是PHP Standard Recommendation的简写&#xff0c;它其实应该叫PSRs&#xff0c;即系列推荐标准&#xff1a;目前通过的规范有PSR-0(Autoloading Standard)、PSR-1(Basic Coding Standard)、PSR-2(Coding Style Guide)、PSR-3(Logger Interface)、…

选择排序法对数组进行排序

package selectionSort;import java.util.Arrays;public class Exam { //使用选择排序法对数组进行排序public static void main(String[] args) {int[] nums {23,3453,123,54,12,45,145,135,656,146,65};SelectionSort(nums);System.out.println(Arrays.toString(nums));}publ…

唐骏给李开复泼冷水:创业不可复制

东方企业家》十月刊刊登我主持的唐骏专栏&#xff0c;发表评创业热潮的冷思考。 题&#xff1a;创业是不可复制的 李开复从谷歌辞职&#xff0c;投身到创业热潮之中。很多媒体朋友问我&#xff0c;如何评价开复的辞职和创业?对此我一概未作回答。其实我很关注&#xff0c;也引…

爬取校园新闻首页的新闻

1. 用requests库和BeautifulSoup库&#xff0c;爬取校园新闻首页新闻的标题、链接、正文。 import requests from bs4 import BeautifulSoup url requests.get("http://news.gzcc.cn/html/xiaoyuanxinwen/")url.encoding "utf-8" soup BeautifulSoup(…

php服务划分,云计算提供的服务分为哪三个层次

三个层次&#xff1a;1、基础设施即服务(IaaS)&#xff0c;向云计算提供商的个人或组织提供虚拟化计算资源&#xff1b;2、平台即服务(PaaS)&#xff0c;为开发人员提供通过全球互联网构建应用程序和服务的平台&#xff1b;3、软件即服务((SaaS)&#xff0c;通过互联网提供按需…

如何做个人职业规划和年度计划

在做规划的同时&#xff0c;已经结合工作和个人自身情况思考调整个人的职业规划以及2012年自己的学习成长计划。持续了大约2个月的时间&#xff0c;已经整理出了2012年自己的目标和计划。总结一下&#xff0c;制定个人规划大致分为几个步骤&#xff1a; 一、认识自己。主要包括…

centos 7 快速安装nginx

输入指令 vim /etc/yum.repos.d/nginx.repo 输入以下内容 [nginx] namenginx repo baseurlhttp://nginx.org/packages/centos/7/$basearch/ gpgcheck0 enabled1 wq 进行保存 验证是否安装成功 安装 yum install nginx 启动nginx服务 nginx 测试是否启动成功 在linux输入你的IP地…

matlab colorbar采用对数,matlab colorbar的使用 | 學步園

1&#xff1a;請問matlab中畫多張圖如何使用同一範圍的colorbar?例如生成了圖1,2,3生成圖1時&#xff0c;使用temp1caxis;將圖1的z值的取值範圍(即colorbar的取值範圍)取出。生成圖2,3時使用caxis(temp1)命令將圖2,3的z值的取值範圍設為同1相同。然後對各個同使用colorbar命令…

BFS简单搜索--POJ 2243

这题就是简单的BFS搜索&#xff0c;刚刚转到C&#xff0c;还有很多库函数不熟悉&#xff0c;理解到BFS是一种奇妙的迭代法&#xff0c;其用的主要是队列的性质。 1 /*BFS简单搜索*/ 2 #include<iostream> 3 #include<queue> 4 #include<cstring> 5 6 using …

python_cookies

1.将cookies保存到变量中&#xff0c;然后打印cookie中的值 #coding:utf-8 #将cookies保存到变量中&#xff0c;然后打印cookie中的值 import urllib2 import cookielib #声明一个CookieJar对象实例保存cookie cookiecookielib.CookieJar() #利用urllib2库中的HTTPCookieProces…