이 글에서는 PHP에 대한 관련 지식을 제공합니다. 로그 채널을 사용하여 동작 로그를 임시로 저장하고 예약된 작업을 사용하여 로그 콘텐츠에 기록하는 등 예제를 기반으로 미들웨어를 사용하여 동작 로그를 기록하는 문제를 주로 살펴봅니다. 데이터베이스 등을 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.
추천 학습: "PHP 비디오 튜토리얼"
1. 미들웨어 정의
명령줄 지침을 통해 빠르게 미들웨어를 생성할 수 있습니다.
php think make:middleware Behavior
이 명령은 app/middleware 디렉토리에 동작을 생성합니다. 미들웨어. 내용은 다음과 같습니다.
<?phpdeclare (strict_types = 1);namespace app\middleware;use think\facade\Log;class Behavior{ /** * 处理请求 * * @param \think\Request $request * @param \Closure $next * @return Response */ public function handle($request, \Closure $next) { //start 加入以下内容 $admin = get_admin_info(); //当前登录用户的信息,自己实现 $method = strtolower($request->method()); $is_ajax = $request->isAjax(); $route = $request->pathinfo(); $req = $_REQUEST; unset($req['s'],$req['_session']); $req_data = $req ? json_encode($req) : ''; $data = [ 'admin_id' => $admin['id'], //操作人id 'admin_user' => $admin['user'], //操作人用户名 'route' => $route, //操作的路由地址 'method' => $method, //get/post 'req_tp' => $is_ajax ? 'ajax' : 'normal', 'req_data' => $req_data, //get/post的数据 'ip' => getIp(), 'create_time' => time() ]; //end return $next($request); }}
2. 로그 채널을 사용하여 행동 로그를 임시 저장합니다
행동 로그를 데이터베이스에 실시간으로 기록하는 것은 권장되지 않습니다. 이는 데이터베이스에 불필요한 부담을 줄 수 있습니다. 로그 파일 캐시를 정기적으로 데이터베이스에 저장합니다. 提示:先阅读官方日志处理教程 https://www.kancloud.cn/manual/thinkphp6_0/1037616
로그 처리
1. 로그 구성 파일을 수정합니다
config/log.php를 '채널' => []에서 열고 마지막으로 녹음을 위한 별도의 채널을 추가합니다. 행동 로그:
// 其它日志通道配置 //行为日志 'behavior' => [ 'path' => runtime_path().'behavior', //日志存放目录 'type' => 'File', 'single' => 'b', //单一文件日志:文件名 'file_size' => 1024*1024*10, //日志文件大小限制(超出会生成多个文件 'max_files' => 30, //文件最大数量 'realtime_write' => false, // 关闭实时写入 ],
2. 글로벌 미들웨어 등록
app/middleware.php를 열고 행동 로그 글로벌 미들웨어를 등록하세요
<?php // 全局中间件定义文件return [ // 全局请求缓存 // \think\middleware\CheckRequestCache::class, // 多语言加载 // \think\middleware\LoadLangPack::class, // Session初始化 // \think\middleware\SessionInit::class // 行为日志 \app\middleware\Behavior::class, ];
3. 로그가 성공적으로 생성될 수 있는지 테스트하세요
이 프로젝트의 아무 페이지나 방문하세요. 예: http://www.tp6.com/index/index/test?a=1&b=2, 다음 파일이 생성될 수 있는지 확인하세요.
파일을 열면 데이터가 기록되었습니다
{"time":"2022-04-16T21:38:48+08:00" ,"type":"info","msg":"{"admin_id":888,"admin_user":"fanchen"," 경로":"색인/색인/테스트","방법":"get"," req_tp":"normal","req_data":"{"a":"1","b":"2"}" ,"ip":"127.0.0.1","create_time":1650116328}"}
3. 예약된 작업을 사용하여 정기적으로 데이터베이스에 로그 콘텐츠를 씁니다
1. 예약된 작업이 필요한 새 API 메서드를 만듭니다.
/** * 定时任务服务器定时将用户行为日志插入到数据库 * @return void */ public function sync_behavior_log() { $path = runtime_path() . 'behavior/b.log'; $b_file = file_get_contents($path); $b_arr = explode(PHP_EOL, $b_file); $d = []; foreach ($b_arr as $b) { $data = json_decode($b, true); if (!empty($data['msg'])) { $d[] = json_decode($data['msg'], true); } } if ($d) { try { Db::name('log_behavior')->insertAll($d); //批量插入数据库 file_put_contents($path, ''); //清空文件日志 echo '采集用户行为日志成功' . count($d); } catch (DbException $e) { echo ($e->getMessage()); } } }
2. 새로운 행동 로그 데이터 테이블 log_behavior
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for log_behavior -- ---------------------------- DROP TABLE IF EXISTS `log_behavior`; CREATE TABLE `log_behavior` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID', `admin_id` int(11) NOT NULL DEFAULT 0 COMMENT '用户id', `admin_user` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '用户名', `route` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '模块名称', `method` enum('delete','put','post','get') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'get' COMMENT '请求方式 1get 2post 3put 4delete', `req_data` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '请求数据', `ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '用户ip', `create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, INDEX `uid`(`admin_id`) USING BTREE, INDEX `admin_user`(`admin_user`) USING BTREE, INDEX `route`(`route`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 3902195 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '行为日志' ROW_FORMAT = Compact; SET FOREIGN_KEY_CHECKS = 1;
3을 생성합니다. 새로운 예약 작업 생성
새 예약 작업을 생성하고 1단계에서 정기적으로 sync_behavior_log 주소에 액세스하는 것이 좋습니다. 5분마다
이 시점에서 사용자가 데이터 테이블에 접근하면 행동 로그 데이터가 일정한 간격으로 일괄 삽입됩니다.
추천 학습: " PHP 비디오 튜토리얼》
위 내용은 분석 예: thinkphp가 미들웨어를 사용하여 행동 로그를 기록하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

thinkphp是国产框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了关于使用think-queue来实现普通队列和延迟队列的相关内容,think-queue是thinkphp官方提供的一个消息队列服务,下面一起来看一下,希望对大家有帮助。

thinkphp基于的mvc分别是指:1、m是model的缩写,表示模型,用于数据处理;2、v是view的缩写,表示视图,由View类和模板文件组成;3、c是controller的缩写,表示控制器,用于逻辑处理。mvc设计模式是一种编程思想,是一种将应用程序的逻辑层和表现层进行分离的方法。

thinkphp扩展有:1、think-migration,是一种数据库迁移工具;2、think-orm,是一种ORM类库扩展;3、think-oracle,是一种Oracle驱动扩展;4、think-mongo,一种MongoDb扩展;5、think-soar,一种SQL语句优化扩展;6、porter,一种数据库管理工具;7、tp-jwt-auth,一个jwt身份验证扩展包。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了使用jwt认证的问题,下面一起来看一下,希望对大家有帮助。

thinkphp查询库是否存在的方法:1、打开相应的tp文件;2、通过“ $isTable=db()->query('SHOW TABLES LIKE '."'".$data['table_name']."'");if($isTable){...}else{...}”方式验证表是否存在即可。

本篇文章给大家带来了关于ThinkPHP的相关知识,其中主要整理了使用think-queue实现redis消息队列的相关问题,下面一起来看一下,希望对大家有帮助。

在thinkphp3.2中,可以利用define关闭调试模式,该标签用于变量和常量的定义,将入口文件中定义调试模式设为FALSE即可,语法为“define('APP_DEBUG', false);”;开启调试模式将参数值设置为true即可。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
