php根据代码反推场景,巧用debug_backtrace()

1.先写一个统计方法调用路径的方法

/**
     * @desc: 统计方法调用路径
     * @date: 2021-11-9
     */
    public function statisticsAllFunctionPath()
    {
    	//连接redis
        $redis = ZFactory::getRedis('***Redis');
        $redis_key = "FunctionPath";
        
        //记录场景路径
        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
        $trace_path = "";
        foreach ($backtrace as $key => $trace){
            if($key == 0){
                $trace_path = $trace['function'];
            }else{
                $trace_path = $trace_path.'-'.$trace['function'];
            }
        }

        //md5字符串路径过滤 hash排除重复数据
        $hash_key = md5($trace_path);
        if(!$redis->hExists($redis_key, $hash_key)){
            //不存在 则插入hash值
            $redis->hSet($redis_key, $hash_key, $trace_path);
        }

        if($_COOKIE['test'] == 2){
            echo "<pre>";
            var_dump($redis_key);echo "<br>";echo "<br>";    //输出:FunctionPath    
            var_dump($hash_key);echo "<br>";echo "<br>";    //输出:e2806d650d6a13384f412fce61196a1a
            var_dump($trace_path);echo "<br>";echo "<br>";    //输出:sta********eplinkScene-c*******k-generateShareUrl-displayT6-display-call_user_func_array-call*****d-execute-renderComponent-dispatch
            exit();
        }
        return true;
    }

2.在需要统计的地方,调用统计方法路径方法

public function createDeeplink()
    {
    	...
    	...
    	//调用统计方法调用路径方法
        $testModel = new TestModel();
        $testModel->statisticsAllFunctionPath();
		...
		...
	}		

3.打印 redis 收集到的数据,根据收集到的数据反推出接口url

/*
string(13) "所有数据:"
  array(8) {
  ["e2806d650d6a13384f412fce61196a1a"]=>string(138) "sta********eplinkScene-c*******k-generateShareUrl-displayT6-display-call_user_func_array-call*****d-execute-renderComponent-dispatch"
	}

根据以上数据可以反推出接口url:/index.php?com=test&t=display
*/

4.根据反推到的接口url,再去查找前端调用接口的位置或场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值