设为首页 收藏本站
查看: 2455|回复: 0

[经验分享] PHP扩展开发-内核执行流程与扩展结构

[复制链接]

尚未签到

发表于 2018-12-19 11:54:09 | 显示全部楼层 |阅读模式
//myext.c  
#ifdef HAVE_CONFIG_H
  
#include "config.h"
  
#endif
  
#include "php.h"
  
#include "php_ini.h"
  
#include "ext/standard/info.h"
  
#include "php_myext.h"
  
//全局变量声明
  
ZEND_DECLARE_MODULE_GLOBALS(myext)
  
/* True global resources - no need for thread safety here */
  
static int le_myext;
  
//模块函数的导出
  
const zend_function_entry myext_functions[] = {
  
  PHP_FE(confirm_myext_compiled,  NULL)   /* For testing, remove later. */
  
    PHP_FE_END  /* Must be the last line in myext_functions[] */
  
};
  
//模块结构
  
zend_module_entry myext_module_entry = {
  
#if ZEND_MODULE_API_NO >= 20010901
  
  STANDARD_MODULE_HEADER,
  
#endif
  
  "myext",
  
  myext_functions,
  
  PHP_MINIT(myext),
  
  PHP_MSHUTDOWN(myext),
  
  PHP_RINIT(myext),   /* Replace with NULL if there's nothing to do at request start */
  
  PHP_RSHUTDOWN(myext),   /* Replace with NULL if there's nothing to do at request end */
  
  PHP_MINFO(myext),
  
#if ZEND_MODULE_API_NO >= 20010901
  
  PHP_MYEXT_VERSION,
  
#endif
  
  STANDARD_MODULE_PROPERTIES
  
};
  
#ifdef COMPILE_DL_MYEXT
  
ZEND_GET_MODULE(myext)
  
#endif
  
//ini配置文件的设置
  
PHP_INI_BEGIN()
  
  STD_PHP_INI_ENTRY("myext.global_value",  "42", PHP_INI_ALL, OnUpdateLong, global_value, zend_myext_globals, myext_globals)
  
  STD_PHP_INI_ENTRY("myext.global_string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_myext_globals, myext_globals)
  
PHP_INI_END()
  
//初始化全局变量
  
static void php_myext_init_globals(zend_myext_globals *myext_globals)
  
{
  
  myext_globals->global_value = 0;
  
  myext_globals->global_string = NULL;
  
}
  
//模块加载时的函数
  
PHP_MINIT_FUNCTION(myext)
  
{
  
  /* If you have INI entries, uncomment these lines
  
  REGISTER_INI_ENTRIES();
  
  */
  
  return SUCCESS;
  
}
  
//模块卸载时函数
  
PHP_MSHUTDOWN_FUNCTION(myext)
  
{
  
  /* uncomment this line if you have INI entries
  
  UNREGISTER_INI_ENTRIES();
  
  */
  
  return SUCCESS;
  
}
  
//请求初始化函数
  
PHP_RINIT_FUNCTION(myext)
  
{
  
  return SUCCESS;
  
}
  
//请求关闭函数
  
PHP_RSHUTDOWN_FUNCTION(myext)
  
{
  
  return SUCCESS;
  
}
  
//模块信息phpinfo
  
PHP_MINFO_FUNCTION(myext)
  
{
  
  php_info_print_table_start();
  
  php_info_print_table_header(2, "myext support", "enabled");
  
  php_info_print_table_end();
  
  /* Remove comments if you have entries in php.ini
  
  DISPLAY_INI_ENTRIES();
  
  */
  
}
  
//测试函数
  
PHP_FUNCTION(confirm_myext_compiled)
  
{
  
  char *arg = NULL;
  
  int arg_len, len;
  
  char *strg;
  
  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
  
    return;
  
  }
  
  len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "myext", arg);
  
  RETURN_STRINGL(strg, len, 0);
  
}



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-653160-1-1.html 上篇帖子: 源码安装php提示Cannot find libmysqlclient under /usr/local/mysql 下篇帖子: openstack php sdk php
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表