Um Simples Chat sem Banco de Dados
Sem banco de dados o nosso trabalho fica difícil, o único modo de atualizar as mensagens é o refresh. O código ler.php é simples, segue abaixo :
O código é pequeno e além de ler as mensagens ele tem outra função. Você pode notar que é incluido um script de nome user.php. O nome não é coincidência, era um script que mostrava os usuários on-line (há um script parecido aqui no PHPBRASIL). Fiz algumas alterações de modo a cada minuto eu tenha uma lista atualizada dos usuários do chat. O código segue abaixo :
Como eu falei, sem banco de dados fica difícil. O refresh não é a melhor solução e para fazer um chat igual ao UOL ou o do Terra é necessário banco de dados. O acesso ao banco de dados é mais rápido que a leitura de um arquivo e como as funções flush e sleep, você pode criar um chat sem refresh.
Espero daqui a algumas semanas lançar um tutorial de um chat com banco de dados e que também eu tenha dado uma luz sobre esse assunto.
Rodrigo Romano Moreira
<?php
session_start();
include ("./user.php");
echo '<html><head><meta http-equiv="Refresh" content="10"></head><body>';
$arq="reg.txt";
$fd = fopen ($arq, "r");
while (!feof ($fd)) {
$buffer = fgets($fd,4096);
echo $buffer;
}
fclose ($fd);
?>
</body>
</html>
O código é pequeno e além de ler as mensagens ele tem outra função. Você pode notar que é incluido um script de nome user.php. O nome não é coincidência, era um script que mostrava os usuários on-line (há um script parecido aqui no PHPBRASIL). Fiz algumas alterações de modo a cada minuto eu tenha uma lista atualizada dos usuários do chat. O código segue abaixo :
<?php
$timer = 1;
$filename = "log.txt";
if (!$datei) $datei = dirname(__FILE__)."/$filename";
$time = @time();
$ip = $nome;
$string = "$ip|$time\n";
$a = fopen("$filename", "a+");
fputs($a, $string);
fclose($a);
$timeout = time()-(60*$timer);
$all = "";
$i = 0;
$datei = file($filename);
for ($num = 0; $num < count($datei); $num++) {
$pieces = explode("|",$datei[$num]);
if ($pieces[1] > $timeout) {
$all .= $pieces[0];
$all .= ",";
}
$i++;
}
$all = substr($all,0,strlen($all)-1);
$arraypieces = explode(",",$all);
$useronline = count(array_flip(array_flip($arraypieces)));
$dell = "";
for ($numm = 0; $numm < count($datei); $numm++) {
$tiles = explode("|",$datei[$numm]);
if ($tiles[1] > $timeout) {
$dell .= "$tiles[0]|$tiles[1]";
}
}
if (!$datei) $datei = dirname(__FILE__)."/$filename";
$time = @time();
$ip = $nome;
$string = "$dell";
$a = fopen("$filename", "w+");
fputs($a, $string);
fclose($a);
?>
Como eu falei, sem banco de dados fica difícil. O refresh não é a melhor solução e para fazer um chat igual ao UOL ou o do Terra é necessário banco de dados. O acesso ao banco de dados é mais rápido que a leitura de um arquivo e como as funções flush e sleep, você pode criar um chat sem refresh.
Espero daqui a algumas semanas lançar um tutorial de um chat com banco de dados e que também eu tenha dado uma luz sobre esse assunto.
Rodrigo Romano Moreira
Estou tendo problemas para inserir uma senha de Admin no Chat, dá o seguinte erro: '[var..now]&fase=[var._GET.fase]' e a tela seguinte da como Não Encontrada. Alguem pode me ajudar a arrumar.
Abraço
Daniel
Abraço
Daniel
28/07/2010 5:19pm
(~14 anos atrás)
Você fala que logo a frente vai falar sobre o log.txt e não fala =(.
Resultado, nã funcionou aqui.
Resultado, nã funcionou aqui.
03/06/2009 4:56pm
(~16 anos atrás)
No ler.php as mensagens são carregadas de cima para baixo.. então as ultimas mensagens enviadas nunca são vistas ok!
eu adicionei alguns codigos de html amais q podem contornar isso:--
<?php
session_start();
include ("./user.php");
?>
<html><head><meta http-equiv="Refresh" content="10;URL=ler.php#FIM"></head><body>
<?
$arq="reg.txt";
$fd = fopen ($arq, "r");
while (!feof ($fd)) {
$buffer = fgets($fd,4096);
echo $buffer;
}
fclose ($fd);
?><a name="FIM"></a>
</body>
</html>
--
o #FIM fará q a janela sempre abra no final de todo o conteudo já digitado..
No mais muito bom o código..
Valeu
[s]
eu adicionei alguns codigos de html amais q podem contornar isso:--
<?php
session_start();
include ("./user.php");
?>
<html><head><meta http-equiv="Refresh" content="10;URL=ler.php#FIM"></head><body>
<?
$arq="reg.txt";
$fd = fopen ($arq, "r");
while (!feof ($fd)) {
$buffer = fgets($fd,4096);
echo $buffer;
}
fclose ($fd);
?><a name="FIM"></a>
</body>
</html>
--
o #FIM fará q a janela sempre abra no final de todo o conteudo já digitado..
No mais muito bom o código..
Valeu
[s]
05/03/2004 8:26am
(~21 anos atrás)
Estou tendo problemas com a versão Mysql,na hora que funcionar,eu envio o tutorial.
26/04/2002 5:36pm
(~23 anos atrás)
Gostei muito do chat, mas estou ansioso para ver a versão com MySQL.
25/04/2002 11:46pm
(~23 anos atrás)
Todas as funções estão prontas ,exceto a funções lê as mensagens.
Estou tentanto criar uma coisa com iframe e javascript,mas ainda chego lá.
Estou tentanto criar uma coisa com iframe e javascript,mas ainda chego lá.
20/04/2002 5:12pm
(~23 anos atrás)
Fatal error: Call to undefined function session_register() in /home/u145043887/public_html/entra.php on line 3
pq?????