读取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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 1
jiangjun

文件一大,内存就爆了

2周前 评论

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