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

腾云网络 八年经验专注网站建设
  • 首页
  • 服务项目
    • 网站建设
    • 微信小程序
    • 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编程培训教育班
  • 服务器怎么运行php 虚拟主机虚拟服务器技术的出现,你了解吗?mac运行php文件
  • 【资源属性】v0.1资源大小:1.4KB资源类别:源码下载
  • php框架是什么意思PHP编程语言项目开发中常见的框架,看看有什么?php框架中的t框架
  • 什么时候需要使用PHP代码美化:代码的格式化与美化
  • php代码在线格式化工具:格式化的时间默认为当前时间*@格式化php代码
  • 论坛php网站模板中国最大社区技术及服务商之一推出最新论坛程序软件7.0php 论坛模板
  • norepad++如何编写php代码神秘的PHP项目终于揭开面纱,加速和优化PHP扩展手把手编写自己的php mvc
  • 兼职开发者论坛php网易手游频道(/)招聘全职/兼职编辑啦! php开发工程师
  • 前端三大主流框架并且推荐PHP中文网主流前端框架相关视频教程

相关

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

标签

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

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

联系电话:13160355545

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

联系邮箱:admin@tyweb.net

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

热门搜索

网站建设 网站 公司 宿迁 模版 模板 源码 教育 学校 响应式 百度 营销型 seo 网站架构 交通设备制作 教育类网站 项王故里网站建设案例 中文编程 优化 管理
  • 客服

    在线客服

  • 电话

    13160355545

  • 微信

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