我正在使用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)
答案 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')日志。