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

腾云网络 八年经验专注网站建设
  • 首页
  • 服务项目
    • 网站建设
    • 微信小程序
    • 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代码注入漏洞三星工程师泄露内部项目高度敏感源代码凭证和密钥(图)php远程代码执行漏洞
  • php语言培训学校软件测试学习培训网站有哪些?视频类的软件测试自学网站asp语言改php
  • php开源b2c商城系统如何挑选一款靠谱的商城系统?方面挑选作b2c java开源网店系统
  • php编程题2017年互联网刷题网站,题量之大,刷到你吐php 笔试编程题
  • php 代码加密 组件 教程健身类小程序前后端项目源码(代码开源,不加密)
  • sql编程语言 30岁转换居然也想混饭吃,不把我们放在眼里?
  • 9.9起-AT&;哥&;排行榜
  • 本月和人工智能语言正在蓬勃发展每一种编程语言的兴起从来都离不开
  • 心理咨询行业也能开发微信小程序吗?类小程序
  • 如何用php开发网站推荐PHP初学者选择第一个框架,学习资料十全框架用php开发app后端接口

相关

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

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

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 2026 2024 请输入关健词 货源 货货源 虚拟
  • 客服

    在线客服

  • 电话

    13160355545

  • 微信

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