<?php /* 思路:给定文件,写入读取(fopen ,fwrite……) 如果大于1M 则重写备份 传给一个内容, 判断大小,如果大于1M,备份 小于则写入 */ class Log{ //定义一个常量,创建一个文件的名称 const LOGFILE = 'curr.log'; //写入文件 public static function write($cont){ $cont .=" "; $log = self::isBak(); //计算文件的地址,判断大小 $fh = fopen($log,'ab'); //打开,追加模式 fwrite($fh,$cont); fclose($fh); } //备份日志 public static function bak(){ //给出写入文件的路径,把原来的日志 //改为年月日 .bak 的形式 $log = ROOT .'data/log/'. self::LOGFILE; $bak = ROOT .'data/log/'.date('Ymd') .mt_rand(10000,99999). '.bak'; return rename($log,$bak); } //判断日志是否大于1M public static function isBak(){ //判断文件是否存在 $log = ROOT .'data/log/'. self::LOGFILE; if(!file_exists($log)){ //如果不存在,则创建该文件 touch($log); // touch在linux也有此命令,是快速的建立一个文件 return $log; } //判断大小 clearstatcache(true,$log); //清除缓存,则创建.bak文件 $size = filesize($log); if($size <= 1024*1024){ //如果<=1M 则写入 return $log; } //到这一行,说明大于1M if(!self::bak()){ return $log; } else { touch($log); return $log; } } } ?>
极端法测试调用,循环执行10000次
//另起页面 //引入日志功能类 class mysql{ public function query($sql){ Log::write($sql); } } $mysql= new mysql(); /**/ for($i=0;$i<10000;$i++){ $sql='select goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goods where goods_id='.rand(10000,99999); $mysql->query($sql); } Log::write('记录'); echo "执行完毕";