Shoutbox avec ajax

Fermé
Integreur Messages postés 84 Date d'inscription jeudi 1 décembre 2016 Statut Membre Dernière intervention 4 octobre 2022 - 17 févr. 2022 à 04:52
Integreur Messages postés 84 Date d'inscription jeudi 1 décembre 2016 Statut Membre Dernière intervention 4 octobre 2022 - 18 févr. 2022 à 18:08
Bonjour a tous,


J'utilise une petite shoutbox qui me sert de tchat pour discuter avec des amis sur un serveur privé.Tout fonctionnait a merveille avant que je fasse une mise a jour (je suis sous debian 11).Du coup je sais pas si le problème vient du code ou du navigateur.J'utilise apache2 en serveur web.J'ai pris ce bout de code ajax sur le net et j'en été très satisfait j'usqua présent.Le code est simple pour m'éviter d'avoir a créer une base de donnée que je ne saurais pas gérer.Quand quelqu'un envoi un message, ce message est enregistré dans un fichier texte nommé "chat.txt" et ansi de suite pour les autres messages, le fichier texte est lu et son contenu s'affiche donc sur la page du tchat.


Voici le code de la page du tchat:


<?php
/*Just for your server-side code*/
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta charset="utf-8">
<style type="text/css">
body { padding-left:40px; background-image:radial-gradient(white, black);;; font-family:arial;}
input, textarea { font-family: courier new; font-size: 12px; }
#content { width:800px; text-align:left; margin-left:60px; }

#chatwindow { border:1px solid #aaaaaa; padding:4px; background:#ff8000; color:white;}
#chatnick { border: none; border-bottom:1px solid #aaaaaa; padding:4px; background:#ff8000;}
#chatmsg { border: none; border-bottom:1px solid #aaaaaa; padding:4px; background:#ff8000; }

#info { text-align:left; padding-left:0px; font-family:arial; }
#info td { font-size:12px; padding-right:10px; color:#ff8000; }
#info .small { font-size:10px; padding-left:10px; padding-right:0px; }

#info a { text-decoration:none; color:white; }
#info a:hover { text-decoration:underline; color:#; }

</style>
</head>
<body>
<div id="info">
<br>
<table border="0">
<tr>
<td colspan="2">
</td>
</tr>
<br>
<center><div id="content">
<textarea id="chatwindow" rows="19" cols="95" readonly></textarea><br>

<input id="chatnick" type="text" size="9" maxlength="10" placeholder="Nom"> 
<input id="chatmsg" type="text" size="80" maxlength="80" onkeyup="keyup(event.keyCode);" placeholder="message">
<input type="button" value="Envoyer" onclick="submit_msg();" style="cursor:pointer;border:1px solid gray;"><br><br>
</div></center>
<br>
<br>
<script>
var nick_maxlength=10;
var http_request=false;
var http_request2=false;
var intUpdate;


/* http_request for writing */
function ajax_request(url){http_request=false;if(window.XMLHttpRequest){http_request=new XMLHttpRequest();if(http_request.overrideMimeType){http_request.overrideMimeType('text/xml');}}else if(window.ActiveXObject){try{http_request=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{http_request=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){}}}
if(!http_request){alert('Giving up :( Cannot create an XMLHTTP instance');return false;}
http_request.onreadystatechange=alertContents;http_request.open('GET',url,true);http_request.send(null);}
function alertContents(){if(http_request.readyState==4){if(http_request.status==200){rec_response(http_request.responseText);}else{}}}


/* http_request for reading */
function ajax_request2(url){http_request2=false;if(window.XMLHttpRequest){http_request2=new XMLHttpRequest();if(http_request2.overrideMimeType){http_request2.overrideMimeType('text/xml');}}else if(window.ActiveXObject){try{http_request2=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{http_request2=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){}}}
if(!http_request2){alert('Giving up :( Cannot create an XMLHTTP instance');return false;}
http_request2.onreadystatechange=alertContents2;http_request2.open('GET',url,true);http_request2.send(null);}
function alertContents2(){if(http_request2.readyState==4){if(http_request2.status==200){rec_chatcontent(http_request2.responseText);}else{}}}

/* chat stuff */
chatmsg.focus()
var show_newmsg_on_bottom=1; /* set to 0 to let new msg´s appear on top */
var waittime=1000; /* time between chat refreshes (ms) */

intUpdate=window.setTimeout("read_cont();", waittime);
chatwindow.value = "Bienvenue sur le tchat";


function read_cont() { zeit = new Date(); ms = (zeit.getHours() * 24 * 60 * 1000) + (zeit.getMinutes() * 60 * 1000) + (zeit.getSeconds() * 1000) + zeit.getMilliseconds(); ajax_request2("chat.txt?x=" + ms); }
function display_msg(msg1) { chatwindow.value = msg1.trim(); }
function keyup(arg1) { if (arg1 == 13) submit_msg(); }
function submit_msg() { clearTimeout(intUpdate); if (chatnick.value == "") { check = prompt("please enter username:"); if (check === null) return 0; if (check == "") check="..."; chatnick.value=check; } if (chatnick.value.length > nick_maxlength) chatnick.value=chatnick.value.substring(0,nick_maxlength); spaces=""; for(i=0;i<(nick_maxlength-chatnick.value.length);i++) spaces+=" "; v=chatwindow.value.substring(chatwindow.value.indexOf("\n")) + "\n" + chatnick.value + spaces + "| " + chatmsg.value; if (chatmsg.value != "") chatwindow.value=v.substring(1); write_msg(chatmsg.value,chatnick.value); chatmsg.value=""; intUpdate=window.setTimeout("read_cont();", waittime);}
function write_msg(msg1,nick1) { ajax_request("w.php?m=" + encodeURIComponent(msg1) + "&n=" + encodeURIComponent(nick1)); }
function rec_response(str1) { }

function rec_chatcontent(cont1) {
if (cont1 != "") {
out1 = unescape(cont1);
if (show_newmsg_on_bottom == 0) { out1 = ""; while (cont1.indexOf("\n") > -1) { out1 = cont1.substr(0, cont1.indexOf("\n")) + "\n" + out1; cont1 = cont1.substr(cont1.indexOf("\n") + 1); out1 = unescape(out1); } }
if (chatwindow.value != out1) { display_msg(out1); }
intUpdate=window.setTimeout("read_cont()", waittime);
}
}</script>
</body>
</html>



Maintenant voici le code du fichier w.php (w pour write):

<?php
/**
  • Author: chris at linuxuser.at * Licence: MIT */ $fn = "chat.txt"; $maxlines = 1000; $nick_maxlength = 10; /* Set this to a minimum wait time between posts (in sec) */ $waittime_sec = 0; /* spam keywords */ $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"; $msg = $_REQUEST["m"]; $n = $_REQUEST["n"]; if ($waittime_sec > 0) { $lastvisit = $_COOKIE["lachatlv"]; setcookie("lachatlv", time()); if ($lastvisit != "") { $diff = time() - $lastvisit; if ($diff < $waittime_sec) { die(); } } } if ($msg != "") { if (strlen($msg) < 2) { die(); } if (strlen($msg) > 3) { /* Smilies are ok */ if (strtoupper($msg) == $msg) { die(); } } if (strlen($msg) > 150) { die(); } if (strlen($msg) > 15) { if (substr_count($msg, substr($msg, 6, 8)) > 1) { die(); } } foreach ($blockip as $a) { if ($_SERVER["REMOTE_ADDR"] == $a) { die(); } } $mystring = strtoupper($msg); foreach ($spam as $a) { if (strpos($mystring, strtoupper($a)) === false) { /* Everything Ok Here */ } else { die(); } } foreach ($espam as $a) { if (strtoupper($msg) == strtoupper($a)) { die(); } } $handle = fopen ($fn, 'r'); $chattext = fread($handle, filesize($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); // Last spam filter: die if message has already been in the chat history if (substr_count($chattext, $msg) > 2) { die(); } $spaces = ""; if (strlen($n) > $nick_maxlength-1) $n = substr($n, 0, $nick_maxlength-1); for ($i=0; $i<($nick_maxlength - strlen($n)); $i++) $spaces .= " "; $out = $chattext . $n . $spaces . "| " . $msg . "\n"; $out = str_replace("\'", "'", $out); $out = str_replace("\\\"", "\"", $out); $handle = fopen ($fn, 'w'); fwrite($handle, $out.trim()); fclose($handle); $input = fopen($file, 'r'); } ?>



Si jamais c'est un problème de droits, voici les règles de l'ensemble des fichiers:

rwxrwxrwx 1 root www-data     0 17 févr. 06:18 chat.txt
-rwxrwxrwx 1 root www-data 5310 17 févr. 06:25 tchat.php
-rwxrwxrwx 1 root www-data 2657 8 oct. 17:14 w.php



D'ou vient le problème d'après vous ? Je précise que tout marchait bien il y a encore 2 jours avant que je fasse une misa a jour de ma debian 11.


Merci a vous.


Configuration: Linux / Chrome 98.0.4758.102

20 réponses

jordane45 Messages postés 37734 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 1 octobre 2023 4 615
17 févr. 2022 à 07:59
Bonjour
Vu qur c'est dr l'Ajax.. commence par regarder dans la console JavaScript de ton navigateur ce qui s'y affiche (de préfèrence en passant par firefox et en ayant activé le debugage de l'Ajax (xhr) )
0