如何阻止.txt变得太大的PHP

时间:2019-10-09 11:20:14

标签: php logging

你好

我正在使用网站制作我的第一个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行之后用新的“块”替换。

我无法在网上找到此问题,因此我对如何做到这一点非常好奇。

如果您有任何疑问,请告诉我,希望您能帮助我解决这个问题!

4 个答案:

答案 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)

我建议为此使用“轮转日志文件”。在谷歌上对此进行研究。您将获得一些简单的解决方案。

例如How to configure logrotate with php logs

答案 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);

}

?>