利用php文件操作类函数,完成日志记录功能!

  • 1,025
<?php

define('ROOT',str_replace('\\','/',dirname(__FILE__).'/'));
  const LOGFILE = 'curr.log';//创建一个常量
  class log{//声明一个log类
    public static function write($cont){  //写入
      $cont .= "\r\n";

      $log = self::isBak();//调用self::isBak()
      $fh = fopen($log,'ab');//打开log文件追加
      fwrite($fh,$cont);//$cout顺着资源变量$fh写入
      fclose($fh);  //关闭资源变量
}
  public static function isBak(){
      $log = ROOT . LOGFILE;   //当前路径赋值给log变量
      if(!file_exists($log)){//判断文件是否存在
          touch($log);  //创建文件
          return $log;
      }
      $size = filesize($log);//判断文件大小
      if($size <= 1024*1024){//判断文件小于等于1M
          return $log;
      }
      if(!self::bak()){  //判断不是self::bak()
          touch($log);  //创建log
          return $log;
      }else{
          return $log;
      }
  }
  public static function bak(){
      $log = ROOT . SELF::LOGFILE;////当前路径赋值给log变量
      $bak = ROOT . date('ymd') . mt_rand(10000,99999) . '.bak';
      rename($log,$bak);//重命名
  }
  }
log::write('记录');
echo '执行完毕';
?>

解决:清除filesize的缓存.
具体代码:

    // 读取并判断日志的大小
    public static function isBak() {
        $log = ROOT . 'data/log/' . self::LOGFILE;
        
        if(!file_exists($log)) { //如果文件不存在,则创建该文件
            touch($log);    // touch在linux也有此命令,是快速的建立一个文件
            return $log;
        }

        // 要是存在,则判断大小
        // 清除缓存
        clearstatcache(true,$log);  // 本题 的解决办法
        $size = filesize($log);
        if($size <= 1024 * 1024) { //大于1M
            return $log;
        }
        
        // 走到这一行,说明>1M
        if(!self::Bak()) {
            return $log;
        } else {
            touch($log);
            return $log;
        }
    }

 

weinxin
我的微信
这是我的微信扫一扫
开拓者博主
  • 本文由 发表于 2016年9月17日20:23:21
  • 转载请务必保留本文链接:https://www.150643.com/345.html
匿名

发表评论

匿名网友 填写信息