PHP项目访问(操作)日志开发

封装了一个PHP的扩展,用户或管理员 访问操作的日志记录。

直接上代码了:文中有较详细的 注释说明

<?php

/***
 * 日志类 存储在本地工作目录下路径下
 * 操作(使用)日志 写入文件 读取 删除
 * @param type 可定义为不同的日志路径 如 admin
 */

class MyLog{

    private $baseDir; //基本路径
    private $subDir; //子目录
    private $fileName; //文件名称及后缀

    /**
     * 构造
     * $type  admin  index  api 等
     */
    public function __construct($type='admin')
    {
        $this->baseDir = $_SERVER['DOCUMENT_ROOT']."/use_log/".$type; //基本路径
        $this->subDir = date("Ym");  //子目录 年月份为名
        $this->fileName = date("Ymd") . ".txt"; //文件名称及后缀 年月份天为名
    }

    /**
     * 记录日志 日志内容
     * @param $user_id 用户id
     * 可记录
     */
public function log($user_id)
    {
        //记录数据组成
        $content = [
            "userId"=>$user_id,//请求用户id
            "ip"=> $_SERVER['REMOTE_ADDR'],//访问ip
            "time"=>date('Y-m-d H:i:s',time()),//请求时间
            "uri"=>$_SERVER['REQUEST_URI'],//请求的接口
            "ua"=>$_SERVER['HTTP_USER_AGENT'], //用户代理 浏览器
            "method"=>$_SERVER['REQUEST_METHOD'],//请求方式
        ];

        if($content['method'] == 'GET'){
            $content['param'] = $_GET; //请求参数
        }else{
            $content['param'] = $_POST; //请求参数
        }

        //是否存在文件 不存在则新增
        $fileDir = $this->baseDir . "/" . $this->subDir;
        if (!is_dir($fileDir)) {
            mkdir($fileDir, 0777, true);
        }

        $filePath = $fileDir . "/" . $this->fileName; //文件的完整路径
        $logContent =json_encode($content)."\r\n"; // 转为json_encode 并 每条记录换行
        error_log($logContent, 3, $filePath); //写入文件中
    }

    /**
     * 获取并解析日志文件
     * @param $time 为时间戳
     */
public function get_log($time){
        $list=[];
        $sub = date('Ym',$time);
        $name = date('Ymd',$time).".txt";
        $file= $this->baseDir . "/" . $sub. "/" .$name;

        //是否存在
        if(file_exists($file)){
            $data = file_get_contents($file);
            //内容以换行符分割为数组
            $data=explode("\r\n",$data);
            if(is_array($data)){
                foreach ($data as $key=>$vs){
                    if(!empty($vs)) {
                        $list[] = json_decode($vs, true);
                    }
                }
            }
        }
        return $list;
    }

    /**
     * 删除日志
     * @param $time 为文件名
     */
public function del_log($time){

        $sub = date('Ym',$time);
        $name = date('Ymd',$time).".txt";
        $file= $this->baseDir . "/" . $sub. "/" .$name;

        //是否存在
        if(file_exists($file)){
            unlink($file); //删除文件
        }
        return true;
    }
}

 上面代码,有一定经验的同学可以直接或修改后在自己的项目中使用。

附上扩展的使用

composer require zishu/myextend

PHP 用户使用日志 扩展icon-default.png?t=N7T8https://github.com/2018240448/myhttp

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值