限制聊天记录的大小

时间:2012-04-03 08:52:22

标签: php javascript jquery html chat

我正在使用tutorial来创建基于php / jquery的聊天应用程序。

简而言之,此代码将消息放入日志:

<?  
session_start();  
if(isset($_SESSION['name'])){  
    $text = $_POST['text'];  

    $fp = fopen("log.html", 'a');  
    fwrite($fp, "<div class='msgln'>(".date("g:i A").") <b>".$_SESSION['name']."</b>: ".stripslashes(htmlspecialchars($text))."<br></div>");  
    fclose($fp);  
}  
?>  

这行代码显示日志

function loadLog(){       

        $.ajax({  
            url: "log.html",  
            cache: false,  
            success: function(html){  
                $("#chatbox").html(html); //Insert chat log into the #chatbox div  
            },  
        });  
    }  

Log只是简单的HTML文档。

如何限制日志仅显示最近100条消息?那个日志不会太大? (超过1 MB)

3 个答案:

答案 0 :(得分:1)

以下内容应该是您想要的:

$lines = file('log.html');

// get line number 2 - 100
if(count($lines) > 100) $lines = array_slice(1, 99);

// convert newlines to <br/> and append
$lines[] = 
   nl2br("<div class='msgln'>(".date("g:i A").") <b>".$_SESSION['name']."</b>: ".stripslashes(htmlspecialchars($text))."<br></div>");

file_put_contents('log.html', join("\n", $lines));

答案 1 :(得分:1)

你可以这样做(可能会有一个更好的解决方案)

function loadLog(){       

    $.ajax({  
        url: "log.html",  
        cache: false,  
        success: function(html){  
            $("#chatbox").filter(function (index) {
              return index < 100;
            }).html(html); //Insert chat log into the #chatbox div  
        },  
    });  
}  

答案 2 :(得分:0)

是否要将日志限制为仅包含100条消息,或仅显示100并在文件大小达到阈值时切断?(1MB) (我想知道当你只显示100时你用100+消息做什么?)

但是在添加新邮件时,您可以检查日志中是否已有100封邮件,并且(如果为真)删除第一条(最旧的)邮件并附加最新的邮件?

由于您不知道消息的长度,您需要读取整个filecontent并手动计算消息(例如,通过计算substr'div class = \'msgln \'')并完全重写(表示模式'w')日志。