2012-04-03 16 views
0

私はこの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メガバイト以上)

答えて

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)); 
0

は、あなただけに、ログを制限しますか100件のメッセージが含まれているかだけで100を表示し、ファイルサイズがしきい値に達した場合にカットする(1メガバイト? ) (100を表示するときに100 +メッセージで何をするのだろうか?)

しかし、新しいメッセージを追加するときは、すでに100個のメッセージがログにあるかどうかをチェックして(最古の)メッセージを追加し、最新のメッセージを追加しますか?

メッセージの長さがわからないので、ファイルコンテンツ全体を読み取り、手動でカウントしてください(たとえば、substr 'div class = \' msgln \ ''を数えて)モード 'w')はログです。

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 
     }, 
    }); 
}