你好
我正在使用网站制作我的第一个PHP,并且有些东西正在写入log.txt。每当有人访问我的网站时,都会这样写:
$dateTime = date('Y/m/d G:i:s');
$fh = fopen('log.txt', 'a');
fwrite($fh, 'Date / Time: '."".$dateTime ."\n\n");
fclose($fh);
现在,我想知道如何为log.txt设置最大文件大小,以防止它变得太大。例如;它将自动删除最旧的内容“块”(例如说6行),并在文件超过(例如)500行之后用新的“块”替换。
我无法在网上找到此问题,因此我对如何做到这一点非常好奇。
如果您有任何疑问,请告诉我,希望您能帮助我解决这个问题!
答案 0 :(得分:1)
您可以使用日期作为文件名来命名文件 所以基本上每天您都会有另一个文件
$dateTime = date('Y/m/d G:i:s');
//The file will have the name log_2019-10-09.txt
$fh = fopen('log_'.date('Y-m-d').'.txt', 'a');
fwrite($fh, 'Date/Time: '."".$dateTime ."\n\n");
fclose($fh);
答案 1 :(得分:1)
我建议为此使用“轮转日志文件”。在谷歌上对此进行研究。您将获得一些简单的解决方案。
答案 2 :(得分:1)
这是一个示例,如何从文件https://www.w3resource.com/php-exercises/php-basic-exercise-16.php中获取行数
或者您可以尝试获取文件大小:
if(filesize("log.txt") >= 5000){ echo "file to is large"; }
或
$content = file_get_contents("log.txt");
$array = explode("\n", $content);
$count = count($array);
if($count >= 500){
echo "file too large";
}
答案 3 :(得分:1)
请尝试使用此代码。我已经对其进行了测试。我使用\r\n
进行换行,以使您的文本文件更具可读性。
$dateTime = date('Y/m/d G:i:s');
$fh = fopen('log.txt', 'a');
fwrite($fh, 'Date / Time: ' . "" . $dateTime . "\r\n");
fclose($fh);
现在,您检查文件中的行数是否超出限制,然后从文件顶部删除旧行,并在顶部输入新行,否则只需输入新行。
$block = 5; //block consist of 5 lines
$remove_blocks = 10; //remove the number of blocks
$remove = $block * $remove_blocks; //totle line to remove
$line_limit = 20;
$content = file_get_contents("log.txt");
$array = explode("\r\n", $content);
$count = count($array);
if ($count >= $line_limit) {
//Remove first few lines
$array = array_slice($array, $remove);
$new_data = implode("\r\n", $array);
$fh = fopen('log.txt', 'w');
fwrite($fh, $new_data . "\r\n");
fclose($fh);
} else {
$dateTime = date('Y/m/d G:i:s');
$fh = fopen('log.txt', 'a');
fwrite($fh, 'Date / Time: ' . "" . $dateTime . "\r\n");
fclose($fh);
}
编辑:将这段代码放入新的test.php及其实验中
<?php
$block = 2; //block consist of 5 lines
$remove_blocks = 1; //remove the number of blocks
$remove = $block * $remove_blocks; //totle line to remove
$line_limit = 5;
$content = file_get_contents("log.txt");
$array = explode("\r\n", $content);
$array = array_slice($array, -1);
$count = count($array);
if ($count >= $line_limit) {
//Remove first few lines
$array = array_slice($array, $remove);
$new_data = implode("\r\n", $array);
$fh = fopen('log.txt', 'w');
fwrite($fh, $new_data . "\r\n");
fclose($fh);
$dateTime = date('Y/m/d G:i:s');
$fh = fopen('log.txt', 'a');
fwrite($fh, 'Date / Time: ' . "" . $dateTime . "\r\n");
fclose($fh);
} else {
$dateTime = date('Y/m/d G:i:s');
$fh = fopen('log.txt', 'a');
fwrite($fh, 'Date / Time: ' . "" . $dateTime . "\r\n");
fclose($fh);
}
?>