读取log文件,每一行为一条数据

AI摘要
【知识分享】该代码片段展示了一个PHP函数,用于从指定日期的日志文件中读取、解析和过滤用户数据。函数首先检查日期参数,然后读取对应日志文件,逐行解析JSON格式的日志内容,并根据一系列条件(如时间戳、特定字段值)过滤无效或测试数据,最终将处理后的有效数据记录到另一个日志中。
public function replenishLogAction($date=[])
    {
        if(empty($date)){
            return false;
        }
        $startDate=$date[0];


        //$filename = BASE_PATH.'/data/file/changdu_all_users_0315.log';
        $filename = BASE_PATH.'/data/file/changdu_all_users_'.$startDate.'.log';
        //var_dump($filename);
        //die;

        // 将文件内容读入数组,每行作为一个元素
        $lines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
        $singlePoint = 0;
        $dataArr = [];
        foreach ($lines as $line) {
            // 处理每一行数据
            //echo htmlspecialchars($line) . "<br>";
            $parts = explode('changdu_all_users.INFO: ', $line);
            $date = trim($parts[0], '[] ');//日志时间
            $logTime=strtotime($date);
            if($logTime>strtotime('2026-03-23 17:44:00')){
                DiUtils::getLog()->info("日期".$logTime.":数据不推送");
                continue;
            }
            if(empty($parts[1])){
                continue ;
            }
            $line=$parts[1];

            $parts = explode(' [] []', $line);
            $line=$parts[0];
            $memberData=Tools::object_to_array(json_decode($line));
            if(!empty($memberData) && !empty($memberData['clue_token'])){
                unset($memberData['_url']);
                $dataArr[] = $memberData;
                continue;
            }
            if (empty($memberData['project_id']) || $memberData['project_id'] == '__PROJECT_ID__') {
                continue ;
            }
            if (!empty($user['customize_params'])) {
                continue ;
            }
            if (!empty($user['click_id']) && $user['click_id'] != '__CLICKID__' && strlen($user['click_id']) < 50) {
                continue ;
            }
            if (!empty($user['gdt_vid'])) {
                continue ;
            }
            if (!empty($user['bd_vid'])) {
                continue ;
            }
            $dataArr[] = $memberData;
        }
        $count = count($dataArr)-1;
//        var_dump($count);
//        die;
        foreach ($dataArr as $k=>$item){
          DiUtils::getLog()->info("日期".$startDate.":数据",$item);
        }
    }
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1
jiangjun

文件一大,内存就爆了

1周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!