ограничить размер журнала чата - PullRequest
0 голосов
/ 03 апреля 2012

Я следую этому учебнику , чтобы создать чат-приложение на основе 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 МБ)

Ответы [ 3 ]

1 голос
/ 03 апреля 2012

Вы можете сделать это (возможно, будет лучшее решение)

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  
        },  
    });  
}  
1 голос
/ 03 апреля 2012

Следующее должно быть тем, что вы хотите:

$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));
0 голосов
/ 03 апреля 2012

Хотите ли вы, чтобы журнал содержал только 100 сообщений или только отображал 100, а вырезал, если размер файла достигал порога? (1 МБ) (Интересно, что вы делаете с сообщениями 100+, когда отображается только 100?)

Но при добавлении нового сообщения вы можете проверить, есть ли уже 100 сообщений в журнале, и (если это правда) удалить первое (самое старое) сообщение и добавить самое последнее сообщение?

Так как вы неЧтобы узнать длину сообщений, вам необходимо прочитать весь файл и считать сообщения вручную (например, путем подсчета substr 'div class = \' msgln \ '') и полностью переписать (означает режим 'w') журнал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...