• User Newbie

    chat in php - come modificare il codice?

    Ciao a tutti.
    Ho scaricato una chat semplice semplice, senza bisogno di registrasi, scritta in php. Ha un file htm un file di testo dove archivia le discussioni, un file di testo per archiviare i login, e 3 file in php: login, logout, e chat.
    Prima di riportarli qui premetto che mi piacerebbe modificare i codici per poter ottenere:

    1. che venga scritta l'ora in cui un nuovo entrato posti il suo primo messaggio (invece ho solo l'ora di entrata e uscita dalla chat).
    2. purtroppo se uno non fà logout, ma chiude la finestra di explorer, non risulta mai uscito dalla chat nel file di testo. Si puo evitare?
    3. come si puo ottenere che un nuovo entrato non visualizzi tutto ciò che è stato 'chattato' prima della sua entrata?
      c'è qualcuno che ha voglia di buttarci unn occhio? 😄
      riporto i codici
      login.php:
      [php] <?php
      $chat_lenght = 100; // numero max di messaggi presenti nel file
      $max_single_msg_lenght = 1000; // max caratteri di un singolo messaggio
      $chat_file = "login.txt"; // nome del file di testo in cui scrivere
      header("Expires: ".gmdate("D, d M Y H:i:s")."GMT");
      header("Cache-Control: no-cache, must-revalidate");
      header("Pragma: no-cache");
      ?>
      <?php
      $nickname = str_replace ("\n"," ", $nickname);
      $nickname = str_replace ("<", "<", $nickname);
      $nickname = str_replace (">", ">", $nickname);
      $nickname = stripslashes ($nickname);
      ?>
      &login=
      <?php
      $date = date( "d.F.y. H:i:s T O");
      settype($msg, 'string');
      $lines = file($chat_file);
      $l = nl2br(join('\n',$lines));
      $lines = explode("<br />", $l);
      if (count($lines) >= $chat_lenght) {
      //echo count($lines)/2;
      $diff = count($lines)/2 - $chat_lenght;
      for($i=0; $i<$diff+2; $i++) {
      array_pop($lines);
      }
      }
      $msg = "$date - $nickname enters";
      $countsleep = 0;
      if ($nickname != ""){
      array_unshift($lines, "$msg\r\r");
      $fp = @fopen($chat_file, 'w', 't');
      while ($fp === FALSE) {
      ++$countsleep;
      clearstatcache();
      usleep(rand(5,70));
      $fp = @fopen($chat_file, 'w', 't');
      if($countsleep>50) {
      break;
      }
      }
      if($fp) {
      $fw = fwrite($fp, join('',$lines));
      fclose($fp);
      }

    }
    $lines = file($chat_file);
    echo join('',$lines);
    ?>[/php]logout.php:
    [php] <?php
    $chat_lenght = 100; // numero max di messaggi presenti nel file
    $max_single_msg_lenght = 1000; // max caratteri di un singolo messaggio
    $chat_file = "login.txt"; // nome del file di testo in cui scrivere
    header("Expires: ".gmdate("D, d M Y H:i:s")."GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    ?>
    <?
    $nickname = str_replace ("\n"," ", $nickname);
    $nickname = str_replace ("<", "<", $nickname);
    $nickname = str_replace (">", ">", $nickname);
    $nickname = stripslashes ($nickname);
    ?>
    &login=
    <?php
    $date = date( "d.F.y. H:i:s");
    settype($msg, 'string');
    $lines = file($chat_file);
    $l = nl2br(join('\n',$lines));
    $lines = explode("<br />", $l);
    if (count($lines) >= $chat_lenght) {
    //echo count($lines)/2;
    $diff = count($lines)/2 - $chat_lenght;
    for($i=0; $i<$diff+2; $i++) {
    array_pop($lines);
    }
    }
    $msg = "$date - $nickname exits";
    $countsleep = 0;
    if ($nickname != ""){
    array_unshift($lines, "$msg\r\r");
    $fp = @fopen($chat_file, 'w', 't');
    while ($fp === FALSE) {
    ++$countsleep;
    clearstatcache();
    usleep(rand(5,70));
    $fp = @fopen($chat_file, 'w', 't');
    if($countsleep>50) {
    break;
    }
    }
    if($fp) {
    $fw = fwrite($fp, join('',$lines));
    fclose($fp);
    }

    }
    $lines = file($chat_file);
    echo join('',$lines);
    ?>[/php]chat.php:
    [php]<?php
    $chat_lenght = 100; // numero max di messaggi presenti nel file
    $max_single_msg_lenght = 1000; // max caratteri di un singolo messaggio
    $chat_file = "chat.txt"; // nome del file di testo in cui scrivere
    header("Expires: ".gmdate("D, d M Y H:i:s")."GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    ?>
    <?php
    /* Modified By CgiXp Team : http://www.cgixp.tk /
    /
    Original script by Nicola Delbono [email protected] */
    ?>
    <?
    $nickname = str_replace ("\n"," ", $nickname);
    $nickname = str_replace ("<", "<", $nickname);
    $nickname = str_replace (">", ">", $nickname);
    $nickname = stripslashes ($nickname);
    $message = str_replace ("<", "<", $message);
    $message = str_replace (">", ">", $message);
    $message = escapeshellcmd($message);
    ?>
    &output=
    <?php
    settype($msg, 'string');
    $lines = file($chat_file);
    $l = nl2br(join('\n',$lines));
    $lines = explode("<br />", $l);
    if (count($lines) >= $chat_lenght) {
    //echo count($lines)/2;
    $diff = count($lines)/2 - $chat_lenght;
    for($i=0; $i<$diff+2; $i++) {
    // elimina messaggi in eccesso
    array_pop($lines);
    }
    }
    $msg = stripslashes ($message);
    if(strlen($msg)>$max_single_msg_lenght) {
    $msg = substr($msg, 0, $max_single_msg_lenght);
    }
    $countsleep = 0;
    if ($msg != ""){
    // aggiunge nuovo messaggio
    array_unshift($lines, "$nickname : $msg\r\r");
    $fp = @fopen($chat_file, 'w', 't');
    while ($fp === FALSE) {
    ++$countsleep;
    clearstatcache();
    usleep(rand(5,70));
    $fp = @fopen($chat_file, 'w', 't');
    if($countsleep>50) {
    break;
    }
    }
    if($fp) {
    $fw = fwrite($fp, join('',$lines));
    fclose($fp);
    }

    }
    $lines = file($chat_file);
    echo join('',$lines);
    ?>[/php]


  • User Attivo

    Non ho cambiato ancora niente.. ma così è più leggibile..

    edit by probid:
    Grazie dell'aiuto Tiago 🙂
    Ho tagliato e incollato il codice che avevi "convertito" nel post precedente 😉
    ciao!


  • Super User

    Grazie dell'aiuto,Tiago.
    Benvenuto nel forum GT,phpstarter2.
    Come suggerito da Tiago quando posti del codice php mettilo tra i seguenti tags in modo da evitare posts chilometrici e poco leggibili.
    Così facendo inoltre attireresti anche di più l'attenzione dell'utente che potrebbe aiutarti ;):)
    Ci penso per questa volta 🙂
    ciao!