Announcement

Collapse
No announcement yet.

Chatfile von oben kürzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Chatfile von oben kürzen

    Hallo Leute!

    Ich habe auf meiner Homepage einen Chat (ohne MySQL), der die Einträge von usern in eine text-datei einträgt. Dafür sollen die überflüssigen Zeilen in der Datei entfernt werden, da meine Chatbox (wie Kommandozeile aussehend) eine Konstante Anzahl von Zeilen haben muss. Meine bisheriger Code:
    PHP Code:
        function out($c) {    
            
    $fn "chat.txt";
            
    $maxlines 20;
            
    $handle fopen ($fn'r'); 
            
    $chattext fread($handlefilesize($fn)); fclose($handle);
            
            
    $arr1 explode("\n"$chattext);

            if (
    count($arr1) > $maxlines) {
                
    /* Pruning */
                
    $arr1 array_reverse($arr1);
                for (
    $i=0$i<$maxlines$i++) { $arr2[$i] = $arr1[$i]; }
                
    $arr2 array_reverse($arr2);            
            } else {
                
    $arr2 $arr1;
            }
            
            
    $chattext implode("\n"$arr2);
            
    $out $chattext.$c."<br>\n";
            
    $handle fopen ($fn'w'); fwrite ($handle$out); fclose($handle);                            
        } 
    Diese Funktion wird immer aufgerufen, wenn eine Zeile ausgegeben werden soll.

    Das hat aber den Nachteil das nur eine Zeile gelöscht wird. Schmuggelt sich ab und zu auch nur eine Zeile zuviel in die Datei, krieg ich das mit diesem Script nicht mehr weg.

    Hat jemand eine Lösung oder ein script, welches die Datei unabhängig von der anzahl der überflüssigen Zeilen immer auf die richtige Form formatiert?

    Schonmal Danke im Voraus.

    Nemo

  • #2
    Das Script sollte alles löschen was mehr als 20 Zeilen hat. Warum arbeite es bei dir nicht so.

    Des Weiteren:
    Was ist auf die richtige Form formatiert?
    Was bedeutet das in Zusammenhang mit der Überschrift?
    Christian

    Comment


    • #3
      hm...

      Erstmal Danke für die Schnelle Antwort!
      Warum arbeite es bei dir nicht so.
      Also bei mir löscht es immer nur eine Zeile.
      Was ist auf die richtige Form formatiert?
      Nicht mehr als 20 Zeilen (Definiere: Endet mit '\n')
      Was bedeutet das in Zusammenhang mit der Überschrift?
      Mein Script will mit PHP-Version nicht so richtig => Anderes Script?

      Comment


      • #4
        Hey es gibt bestimmt noch andere lösungen:
        Im Endeffekt soll ein Chat rauskommen, der das selbe Design wie die Windows Kommandozeile (ja ich bin ein freak) hat und auch einige seiner Befehle unterstützt.
        Und ich muss an dem Chat rumbasteln können

        Comment


        • #5
          Originally posted by [NEMO] View Post
          Hey es gibt bestimmt noch andere lösungen:
          Im Endeffekt soll ein Chat rauskommen, der das selbe Design wie die Windows Kommandozeile (ja ich bin ein freak) hat und auch einige seiner Befehle unterstützt.
          Und ich muss an dem Chat rumbasteln können

          ?? Und was hat das mit dem PHP-Script zu tun? Das wäre eine Frage für die Darstellung in HTML....

          Was hat die Kommandozeile und deren Befehle mit einem Chat zu tun? dur willst ein "dir" in dem Chat eingeben? Gut er kann schwarzen Hintergrund haben und weiße Schrift...

          Woran willst du basteln???

          Und was hat das mit der Überschrift zu tun?Von oben?
          Christian

          Comment


          • #6
            Mein gefühl sagt mir, das ich zu viel und zu durcheinander gelabert hab.
            Ich hatte heute einen anstrengenden Tag (sch**** Bildung) und da ist man schonmal etwas neben dem Thema....
            Entschuldigung dafür.

            Fassen wir es kurz:
            Die Datei muss gekürzt werden (also die obersten Zeilen weg), und zwar so, dass dann noch genau 20 Zeilen übrigbleiben. Jede zeile endet mit einem "<br>\n".
            Mein bisheriges Script löscht immer nur eine Zeile, und keiner weiss warum.

            Comment


            • #7
              gesagt, getan:

              Keine Änderung sichtbar.

              Aber mir ist noch was aufgefallen: Nur die befehle wie "dir" oder "ver" verursachen eine verlängerung des chats, weil sie weiteren Text ausgeben. Nochmal der vollständige Code:

              PHP Code:
              <?php
                  
              function out($c) {    
                      
              $fn "chat.txt";
                      
              $maxlines 20;
                      
              $handle fopen ($fn'r'); 
                      
              $chattext fread($handlefilesize($fn)); fclose($handle);
                      
                      
              $arr1 explode("\n"$chattext);

                      if (
              count($arr1) > $maxlines-1) {
                          
              /* Pruning */
                          
              $arr1 array_reverse($arr1);
                          for (
              $i=0$i<$maxlines$i++) { $arr2[$i] = $arr1[$i]; }
                          
              $arr2 array_reverse($arr2);            
                      } else {
                          
              $arr2 $arr1;
                      }
                      
                      
              $chattext implode("\n"$arr2);
                      
              $out $chattext.$c."<br>\n";
                      
              $handle fopen ($fn'w'); fwrite ($handle$out); fclose($handle);                            
                  }

                  
              $fn "chat.txt";
                  
              $maxlines 20;
                  
              $nick_length 9;
                  
              /* Set this to a minimum wait time between posts (in sec) */
                  
              $waittime_sec 0;    
                  
              /* spam keywords */
                  
              $spam[] = "nigger";
                  
              $spam[] = "cum";
                  
              $spam[] = "dick";
                  
              $spam[] = "EAT coon";
                  
              /* IP's to block */
                  
              $blockip[] = "72.60.167.89";
                  
              /* spam, if message IS exactly that string */    
                  
              $espam[] = "ajax";
                  
              /* Get Message & Nick from the Request and Escape them */
                  
              $msg $_REQUEST["m"];
                  
              $msg htmlspecialchars(stripslashes($msg));
                  
              $n $_REQUEST["n"];
                  
              $n htmlspecialchars(stripslashes($n));
                  
              /* Anti-Flooding */
                  
              if ($waittime_sec 0) {
                      
              $lastvisit $_COOKIE["lachatlv"];
                      
              setcookie("lachatlv"time());
                      if (
              $lastvisit != "") {
                          
              $diff time() - $lastvisit;
                          if (
              $diff 5) { die();    }
                      } 
                  }
                  if (
              strlen($msg) > 150) { die(); }
                  if (
              strlen($msg) < 1) { die(); }
                  
              /* Anti-Repeat */
                  
              if (strlen($msg) > 15) { 
                      if (
              substr_count($msgsubstr($msg68)) > 1) { die(); }
                  }
                  
              /* Block IP's */
                  
              foreach ($blockip as $a) {
                      if (
              $_SERVER["REMOTE_ADDR"] == $a) { die(); }
                      if (
              $_SERVER["REMOTE_HOST"] == $a) { die(); }
                  }
                  
              /* Command-Interpreter */
                  
              $echo true;
                  if (
              substr($msg01)=="@"):
                  
              $echo false;
                  
              $msg substr($msg1);
                  endif;

                  
              out("<b>".$n."&gt;</b>".$msg);

                  if (
              $msg == "ver"):
                  
              out("Nemos cmdline-Chat v1.0");
                  endif;
                  if (
              $msg == "dir"):
                  
              $verzeichnis openDir("upload");
                  while (
              $file readDir($verzeichnis)) {
                  if (
              $file != "." && $file != "..") {
                  
              out("<a href=\"upload/$file\">$file</a>");
                  }
                  }
                  
              closeDir($verzeichnis);
                  endif;

              ?>
              Der Chat ist aus einem anderen entstanden (free), deshalb die commants
              Zuletzt editiert von [NEMO]; 19.08.2010, 21:45. Reason: Fehlender Hinweis

              Comment


              • #8
                Hatte meine Beitrag gelöscht, weil es Unsinn war, sry
                Christian

                Comment


                • #9
                  Hallo,

                  wenn es darum geht die letzten n-Zeilen (hier 20) zu erhalten, warum nicht einfach so:
                  PHP Code:
                  $fn "chat.txt";
                  $maxlines 20;
                  $handle fopen ($fn'r+');
                  $chattext fread($handlefilesize($fn));

                  $arr1 explode("\n"$chattext);
                  $out implode("\n"array_slice($arr1, -$maxlines$maxlines));

                  fseek($handle0);
                  fwrite ($handle$out); 
                  fclose($handle); 
                  Gruß Falk
                  Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                  Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                  Comment


                  • #10
                    Ausprobiert. Immernoch keine Änderung sichtbar. Ich habe die chat.txt überprüft und es waren noch alle
                    einträge da (es liegt am php-script). Chmod 777 gesetzt. Nochmal probiert. Geht immer noch nicht.
                    Ich habe das ganze auf meinem Laptop (localhost) und auf meinem server ausprobiert. Auch nicht. Rein Theoretisch hätten eure scripte ja funktionieren müssen (so ein anfänger bin ich ja auch nicht).

                    Was haltet ihr von diesen Alternativen:
                    -Einträge nicht löschen, sonder mit php script für den Chatinhalt immer die letzten anzeigen (serverlast?)
                    -Statt Datei eine Datenbank benutzen (auch wieder ein abfragescript- serverlast?)

                    Hab ihr noch andere Ideen damit ich meinen Chat fertig bekomme?

                    MFG Nemo

                    Comment


                    • #11
                      Hallo,

                      dann gibt es Randbedingungen von denen du uns noch nicht berichtet hast. Das Bsp. was ich gepostet habe funktioniert so definitiv! Hast du die Hinweise zu fopen bzgl. Safe Mode und open_basedir überprüft?

                      Gruß Falk
                      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                      Comment


                      • #12
                        Originally posted by Falk Prüfer View Post
                        Das Bsp. was ich gepostet habe funktioniert so definitiv!
                        Sorry das ich mich nicht gemeldet hatte. Ich habs jetzt rausbekommen.
                        Ich hatte nur den Unterschied zwischen "<br>" und "\n" nicht begriffen.
                        Also im Quelltext alles richtig, als HTML interpretiert nur mist.

                        Aber trotzdem Danke.

                        MFG Nemon32

                        Comment

                        Working...
                        X