<?php
/*
思路:给定文件,写入读取(fopen ,fwrite……)
如果大于1M 则重写备份
传给一个内容,
判断大小,如果大于1M,备份
小于则写入
*/
class Log{
//定义一个常量,创建一个文件的名称
const LOGFILE = 'curr.log';
//写入文件
public static function write($cont){
$cont .="\r\n";
$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 "执行完毕";