宿迁腾云网络网站建设公司

腾云网络 八年经验专注网站建设
  • 首页
  • 服务项目
    • 网站建设
    • 微信小程序
    • APP开发
    • SEO优化
  • 建站费用
  • 成功案例
    • 网站建设案例
    • 小程序案例
    • APP开发案例
    • SEO优化案例
  • 行业动态
    • 网站建设
    • SEO优化
    • 技术日志
  • 联系我们
    • 关于我们
首页 > 行业动态 > 技术日志 > php实现文件下载代码继续执行php原始的执行函数测试代码打造php自己的链路追踪和性能监控 php评论功能实现代码

php实现文件下载代码继续执行php原始的执行函数测试代码打造php自己的链路追踪和性能监控 php评论功能实现代码

2023-01-20

最近看php源码网站模板,为了验证效果网站制作,写了一个php扩展php实现文件下载代码,主要功能是创建php自己的链接跟踪和性能监控

首先从下载源代码

编译安装使用

现在只是一个基本功能,以后会逐步完善

核心功能是重写PHP的执行函数,也就是经常写的

PHP_MINIT_FUNCTION(pid)
{
    REGISTER_INI_ENTRIES();
    ori_execute_ex = zend_execute_ex;
    zend_execute_ex = pid_execute_ex;
    ori_execute_internal = zend_execute_internal;
    zend_execute_internal = pid_execute_internal;
    return SUCCESS;
}

执行过程中发现是要拦截的函数时,会获取函数的参数返回值并记录日志php实现文件下载代码,继续执行PHP原来的执行函数

ZEND_API void pid_execute_core(int internal, zend_execute_data *execute_data, zval *return_value)
{
    char *logs_dir = {0};
    char *re_func = {0};
    char *file_log = "trace.log";
    //从php.ini文件读取拦截函数和日志目录
    logs_dir = INI_STR("pid.log_path");
    re_func = INI_STR("pid.function");
    char *name = (char *) malloc(strlen(logs_dir) + strlen(file_log));
    sprintf(name, "%s%s", logs_dir, file_log);
    FILE *fp;
    if((fp = fopen(name, "a+")) == NULL){
        printf("file cannot open \n");
    }
    zend_function *zf = obtain_zend_function(execute_data);
    int flag = 0;
    char str_1[512] = {0};
    char *token;
    const char s[2] = ",";
    if (zf->common.function_name != NULL){
        sprintf(str_1, ZSTR_VAL(zf->common.function_name));
        /* 获取第一个子字符串 */
        token = strtok(re_func, s);
        /* 继续获取其他的子字符串 */
        while( token != NULL ) {
            printf( "%s\n", token );
            if(strcmp(str_1, token) == 0){
                flag = 1;
                fputs("\n执行函数的名字:", fp);
                fputs( str_1, fp);
                break;
            }else{
                flag = 0;
            }
            token = strtok(NULL, s);
        }
        
        
    }
    int arg_count = 0;
    arg_count = ZEND_CALL_NUM_ARGS(execute_data);
    smart_str res = {0};
    smart_str buf = {0};
    if (arg_count) {
        zval *p = ZEND_CALL_ARG(execute_data, 1);
        if (execute_data->func->type == ZEND_USER_FUNCTION) {
            uint32_t first_extra_arg = execute_data->func->op_array.num_args;
            if (first_extra_arg && arg_count > first_extra_arg) {
                p = ZEND_CALL_VAR_NUM(execute_data, execute_data->func->op_array.last_var + execute_data->func->op_array.T);
            }
        }
        int i;
        for (i = 0; i < arg_count; i++) {
            php_var_export_ex(p, 2, &buf);
            p++;
        }
        
        if(flag == 1){
            fputs(";执行函数的参数:", fp);
            fputs( ZSTR_VAL(buf.s), fp);
            //printf("执行函数的参数 %s ......\n", ZSTR_VAL(buf.s));
        }
        
    }
    if (internal) {
        if (ori_execute_internal) {
            ori_execute_internal(execute_data, return_value);
        } else {
            execute_internal(execute_data, return_value);
        }
    } else {
        ori_execute_ex(execute_data);
    }
    if (return_value) { /* internal */
            php_var_export_ex(return_value, 2, &res);
            if(flag == 1){
                fputs(";执行函数的返回结果:", fp);
                fputs( ZSTR_VAL(res.s), fp);
                //printf("内部函数返回的结果 %s  === \n", ZSTR_VAL(res.s));
            } 
    } else if (execute_data->return_value) { /* user function */
        php_var_export_ex(execute_data->return_value, 2, &res);
            if(flag == 1){
                fputs(";执行函数的返回结果:", fp);
                fputs( ZSTR_VAL(res.s), fp);
                //printf("自定义函数返回结果 %s  ===\n", ZSTR_VAL(res.s));
            }
        
    }
    fclose(fp);
}

测试代码

执行函数的名字:aa;执行函数的参数:'nihao'111
 array (
   0 => 1,
   1 => 'yy',
   2 => 66,
 );执行函数的返回结果:8888
执行函数的名字:date;执行函数的参数:'Y-m-d';执行函数的返回结果:'2021-07-17'
执行函数的名字:aa;执行函数的参数:'nihao'111
 array (
   0 => 1,
   1 => 'yy',
   2 => 66,
 );执行函数的返回结果:8888
执行函数的名字:date;执行函数的参数:'Y-m-d';执行函数的返回结果:'2021-07-17'

Tag: 函数 执行 追踪 源码 代码
网站制作公众号

宿迁腾云网络网站建设公司 | 网站开发 | 网站制作 | 网站优化

咨询电话:13160355545

上一篇

返回栏目

下一篇

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

热推

  • php 开源搜索引擎北京一家公司开了好几个UE4项目,腾讯一般会配备至少10个3d地图引擎 渲染 开源
  • 使用开发Jaa初学者来说明显的变化,你知道吗?
  • php编程培训班哪家好入门语言与职业生涯在计算机编程领域,人生第一行经典代码ug编程好还是北京精雕编程好
  • php 支付宝开发文档新手,小程序和APP有较大的区别?推荐收藏支付宝开发接口文档
  • php打开可以使用编辑器,如+、、VIM等等都可以打开
  • 吾爱编程:5个常用的CRM应用软件,值得收藏!
  • php微信企业号开发 前几天钉钉才和Uber高调搞了一场合作活动微信企业号 php开发
  • 最近流行彩字,下面是简单的实现方法:图像$im=
  • 盘仙人:图片资料自学编程怎么入门(零基础)
  • php开源b2c商城系统开源中国2019年度最受欢迎中国开源软件评选活动 b2c java开源网店系统

相关

如何修复被黑客篡改的网站代码与数据库?入侵迹象与范围评估指南

如何修复被黑客篡改的网站代码与数据库?入侵迹象与范围评估指南

PHP格式化:提升代码质量与协作效率的关键规则

优化 PHP 代码,提升公司内部电脑监控软件安全性

优化 PHP 代码,提升公司内部电脑监控软件安全性

Web 开发:选择平台与语言的商业考量及代码质量的重要性

文本计数器:无需数据库,轻松实现多页计数,减少服务器 I/O

Go与JAVA都有连接池,可以复用数据库连接

Go与JAVA都有连接池,可以复用数据库连接

已采纳支付宝公众号可以查看,步骤是什么?

已采纳支付宝公众号可以查看,步骤是什么?

开放源代码程序方案(--PHP)网站架构

阿里云函数计算运行PHP框架原理及操作步骤分析

EvalPHP过时的插件注入隐蔽的后门破坏网站

EvalPHP过时的插件注入隐蔽的后门破坏网站

标签

seo(1182) 市场营销(661) 网站制作(573) 网站建设(564) 搜索引擎(553) 网站(482) PHP(361) 编程语言(345) 建站(294) 关键词排名优化(267) 网站建设公司(245) 优化(216) seo排名(207) 域名(190) 软件(171) 网站优化(148) 搜索引擎优化(146) 外链(141) 科技(136) 网站关键词(124) 网站排名优化(123) 域名服务器(120) 网站排名(107) 时政(103) 排名优化(95) 搜索引擎收录(93) 网站设计(92) 电子商务(88) 引擎(86) 移动互联网(85) 开发框架(79) 开发(75) 网站服务器(74) 框架(68) 前端开发(68) 网站分析(66) 网站建设方案(65) 关键(64) 流量(63) 源码(62) 百度优化(62) 网站权重(61) 开放源代码(59) seo培训(53) 网页设计(51) 百度(51) php框架(50) 网站建设知识(50) 大数据(50) 谷歌(49)
宿迁腾云网络网站建设公司
网站建设
  • 私人定制
  • 标准模板建站
  • 经济模板建站
精品模板

宿迁腾云网络网站建设公司

联系电话:13160355545

公司地址:江苏省宿迁市丽景湾华庭北门都市花园公寓9楼907

联系邮箱:admin@tyweb.net

全国分站
  • 北京
  • 广东
  • 东莞 广州 中山 深圳 惠州 江门 珠海 汕头 佛山 湛江 河源 肇庆 潮州 清远 韶关 揭阳 阳江 云浮 茂名 梅州 汕尾
  • 山东
  • 济南 青岛 临沂 济宁 菏泽 烟台 泰安 淄博 潍坊 日照 威海 滨州 东营 聊城 德州 莱芜 枣庄
  • 江苏
  • 苏州 徐州 盐城 无锡 南京 南通 连云港 常州 扬州 镇江 淮安 泰州 宿迁
  • 河南
  • 郑州 南阳 新乡 安阳 洛阳 信阳 平顶山 周口 商丘 开封 焦作 驻马店 濮阳 三门峡 漯河 许昌 鹤壁 济源
  • 上海
  • 河北
  • 石家庄 唐山 保定 邯郸 邢台 沧州 秦皇岛 张家口 衡水 廊坊 承德
  • 浙江
  • 温州 宁波 杭州 台州 嘉兴 金华 湖州 绍兴 舟山 丽水 衢州
  • 陕西
  • 西安 咸阳 宝鸡 汉中 渭南 安康 榆林 商洛 延安 铜川
  • 湖南
  • 长沙 邵阳 常德 衡阳 株洲 湘潭 永州 岳阳 怀化 郴州 娄底 益阳 张家界 湘西
  • 重庆
  • 福建
  • 漳州 泉州 厦门 福州 莆田 宁德 三明 南平 龙岩
  • 天津
  • 云南
  • 昆明 红河 大理 文山 德宏 曲靖 昭通 楚雄 保山 玉溪 丽江 临沧 思茅 西双版纳 怒江 迪庆
  • 四川
  • 成都 绵阳 广元 达州 南充 德阳 广安 阿坝 巴中 遂宁 内江 凉山 攀枝花 乐山 自贡 泸州 雅安 宜宾 资阳 眉山 甘孜
  • 广西
  • 贵港 玉林 北海 南宁 柳州 桂林 梧州 钦州 来宾 河池 百色 贺州 崇左 防城港
  • 安徽
  • 芜湖 合肥 六安 宿州 阜阳 安庆 马鞍山 蚌埠 淮北 淮南 宣城 黄山 铜陵 亳州 池州 巢湖 滁州
  • 海南
  • 三亚 海口 琼海 文昌 东方
  • 江西
  • 南昌 赣州 上饶 吉安 九江 新余 抚州 宜春 景德镇 萍乡 鹰潭
  • 湖北
  • 武汉 宜昌 襄樊 荆州 恩施 孝感 黄冈 十堰 咸宁 黄石 仙桃 随州 天门 荆门 潜江 鄂州 神农架
  • 山西
  • 太原 大同 运城 长治 晋城 忻州 临汾 吕梁 晋中 阳泉 朔州
  • 辽宁
  • 大连 沈阳 丹东 辽阳 葫芦岛 锦州 朝阳 营口 鞍山 抚顺 阜新 本溪 盘锦 铁岭
  • 黑龙江
  • 齐齐哈尔 哈尔滨 大庆 佳木斯 双鸭山 牡丹江 鸡西 黑河 绥化 鹤岗 伊春 大兴安岭 七台河
  • 内蒙古
  • 赤峰 包头 通辽 呼和浩特 乌海 鄂尔多斯 呼伦贝尔
  • 贵州
  • 贵阳 黔东 黔南 遵义 黔西 毕节 铜仁 安顺 六盘水
  • 甘肃
  • 兰州 天水 庆阳 武威 酒泉 张掖 陇南 白银 定西 平凉 嘉峪关 临夏 金昌 甘南
  • 青海
  • 西宁 海西 海东 海北 果洛 玉树 黄南
  • 新疆
  • 乌鲁木齐 伊犁 昌吉 石河子 哈密
  • 西藏
  • 拉萨 山南 林芝 日喀则
  • 吉林
  • 长春 白山 白城 延边 松原 辽源 通化 四平
  • 宁夏
  • 银川 吴忠 中卫 石嘴山 固原
SiteMap
网站地图
TAG标签
Copyright © 2017-2025 TYWEB.NET 宿迁腾云网络科技有限公司 ALL RIGHTS RESERVED.   苏ICP备17033535号-1

热门搜索

百度 下载 2025 2024 2026 货源 货货源 虚拟 禅道 报名 金蝶KIS旗舰版
  • 客服

    在线客服

  • 电话

    13160355545

  • 微信

精品模板
建站费用
成功案例
联系我们