mchelder 0 Denunciar post Postado Junho 11, 2003 Pessoal, Baixei o TXtchat e quando tentei rodar o script, ele deu o siguinte erro: Warning: open(/tmp\sess_d3f0c8328340fa72455319879e1f3861, O_RDWR) failed: m (2) in C:\apache\htdocs\ferramentas\chat\chat.php on line 2 Warning: open(/tmp\sess_d3f0c8328340fa72455319879e1f3861, O_RDWR) failed: m (2) in Unknown on line 0 Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0 :) Quem pode me ajudar a configurar o bixinho?!!! Por favor necessito dessa mãozinha!!! Compartilhar este post Link para o post Compartilhar em outros sites
ClicksFavoritos 0 Denunciar post Postado Junho 11, 2003 Mande o código das linhas que tá dando erro, senão fica difícil... Compartilhar este post Link para o post Compartilhar em outros sites
mchelder 0 Denunciar post Postado Junho 12, 2003 Uso o PHPTriad como servidor. Esse script não usa banco de dados, e sou iniciante em PHP, e não estou sabendo configurar o script. O codigo é o seguinte: index.php <? require("chat.inc.php"); require("func_inc.php"); $obj = new chat; $salas = $obj->salas(); for($i=0;$i<count($salas);$i++){ $obj->sala = $salas[$i]; $obj->atualiza_status(); $ar_salas = add_array($ar_salas, $salas[$i] . '('.count($obj->usuarios()).')', $salas[$i]); } $drop_salas = drop_down_array("sala", $ar_salas, "", 1); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>TXTChat</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <p align="center"><strong><font color="#000099" size="5" face="Verdana, Arial, Helvetica, sans-serif">TXTChat</font></strong></p> <p align="center"><strong><font color="#000099" size="5" face="Verdana, Arial, Helvetica, sans-serif">O chat para seu site</font></strong></p> <p align="center"><font color="#FF0000"><strong><?echo $msg?></strong></font></p> <p><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Digite seu apelido para entrar no chat</font></strong></p> <form name="form1" method="post" action="chat.php"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="8%"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Apelido:</font></td> <td width="92%"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> <input name="usuario" type="text" id="usuario"> Sala: <?echo $drop_salas?> <input type="submit" name="Submit" value="Entrar"> </font></td> </tr> </table> </form> <p align="center"> </p> <p align="center"><a href="http://txtchat.netfocus.com.br"><font face="Arial, Helvetica, sans-serif">Página oficial do TXTChat</font></a></p> </body> </html> Tem dois requires um para chat.inc.php e outro para func_inc.php chat.inc.php <? class chat{ function chat(){ $this->path = "salas/"; $this->timeout = 15; $this->MsgEntrada = "entrou na sala..."; $this->MsgSaida = "saiu da sala."; /*Tipos de Mensagens*/ $this->type[0] = "fala para"; $this->type[1] = "pergunta para"; $this->type[2] = "responde para"; $this->type[3] = "concorda com"; $this->type[4] = "discorda de"; $this->type[5] = "desculpa-se com"; $this->type[6] = "surpreende-se com"; $this->type[7] = "murmura para"; $this->type[8] = "sorri para"; $this->type[9] = "suspira por"; $this->type[10] = "flerta com"; $this->type[11] = "ri de"; $this->type[12] = "dá um fora em"; $this->type[13] = "briga com"; $this->type[14] = "grita com"; $this->type[15] = "xinga"; /*sons*/ $this->Sound[0] = "acelera.wav"; $this->Sound[1] = "aplausos.wav"; $this->Sound[2] = "assobio.wav"; $this->Sound[3] = "barulho.wav"; $this->Sound[4] = "beijo.wav"; $this->Sound[5] = "brinde.wav"; $this->Sound[6] = "despertador.wav"; $this->Sound[7] = "gritos.wav"; $this->Sound[8] = "latido.wav"; $this->Sound[9] = "miado.wav"; $this->Sound[10] = "mugido.wav"; $this->Sound[11] = "musica.wav"; $this->Sound[12] = "risadas.wav"; $this->Sound[13] = "vaias.wav"; /*descricao das imagens*/ $this->DescImg[0] = "Assustado"; $this->DescImg[1] = "Bocejo"; $this->DescImg[2] = "Careta"; $this->DescImg[3] = "Dentuço"; $this->DescImg[4] = "Desejo"; $this->DescImg[5] = "Eca!"; $this->DescImg[6] = "Gargalhada"; $this->DescImg[7] = "Indeciso"; $this->DescImg[8] = "Louco"; $this->DescImg[9] = "Na praia"; $this->DescImg[10] = "Ohhh!"; $this->DescImg[11] = "OK!"; $this->DescImg[12] = "Piscada"; $this->DescImg[13] = "Raiva"; $this->DescImg[14] = "Smack!"; $this->DescImg[15] = "Sorrizo"; $this->DescImg[16] = "Zangado"; /*arquivo de imagens*/ $this->FileImg[0] = "i38.gif"; $this->FileImg[1] = "i27.gif"; $this->FileImg[2] = "i23.gif"; $this->FileImg[3] = "i30.gif"; $this->FileImg[4] = "i18.gif"; $this->FileImg[5] = "i31.gif"; $this->FileImg[6] = "i32.gif"; $this->FileImg[7] = "i33.gif"; $this->FileImg[8] = "i34.gif"; $this->FileImg[9] = "i28.gif"; $this->FileImg[10] = "i25.gif"; $this->FileImg[11] = "i20.gif"; $this->FileImg[12] = "i36.gif"; $this->FileImg[13] = "i37.gif"; $this->FileImg[14] = "i19.gif"; $this->FileImg[15] = "i21.gif"; $this->FileImg[16] = "i26.gif"; } function sinal(){ $fd = fopen($this->path . $this->sala . ".sts", "a+"); fputs($fd, $this->usuario . "|" . time() . "\n"); fclose($fd); $this->atualiza_status(); } function atualiza_status(){ $arquivo = $this->path . $this->sala . ".sts"; $fd = fopen($arquivo, "r"); $conteudo = fread($fd, filesize($arquivo)); fclose($fd); $ar_lines = explode("\n", $conteudo); for($i=0;$i<count($ar_lines)-1;$i++){ $dados = explode("|", $ar_lines[$i]); $nome = $dados[0]; $time = $dados[1]; if($time + $this->timeout > time()){ $n = count($usuarios); $usuarios[$n]["nome"] = $nome; $usuarios[$n]["time"] = $time; } else $usuarios_fora[] = $nome; } $fd = fopen($arquivo, "w"); for($i=0;$i<count($usuarios);$i++) fputs($fd, $usuarios[$i]["nome"] . "|" . $usuarios[$i]["time"] . "\n"); fclose($fd); //verifico se os usuarios que estao fora, estão tambem no array de usuario, se nao estiverem, é pq saiu mesmo. for($i=0;$i<count($usuarios);$i++){ if(!$this->ContidoArray($usuarios[$i]["nome"], $n_usuarios)) $n_usuarios[] = $usuarios[$i]["nome"]; } $usuarios = $n_usuarios; unset($n_usuario); if(count($usuarios)) $usuarios = array_unique($usuarios); if(count($usuarios_fora)) $usuario_fora = array_unique($usuarios_fora); if(count($usuarios) and count($usuarios_fora)){ for($i=0;$i<count($usuarios_fora);$i++){ if(!$this->ContidoArray($usuarios_fora[$i], $usuarios)) $this->mensagem_saida_usuario($usuarios_fora[$i]); } } } function existe_usuario($usuario=""){ if(!$usuario) $usuario = $this->usuario; $usuarios_online = $this->usuarios(); for($i=0;$i<count($usuarios_online);$i++) $usuarios_online[$i] = strtolower($usuarios_online[$i]); if($this->ContidoArray(strtolower($usuario), $usuarios_online)) return true; else return false; } function remove_usuario($usuario){ $arquivo = $this->path . $this->sala . ".sts"; $fd = fopen($arquivo, "r"); $conteudo = fread($fd, filesize($arquivo)); fclose($fd); $ar_lines = explode("\n", $conteudo); for($i=0;$i<count($ar_lines)-1;$i++){ $dados = explode("|", $ar_lines[$i]); $nome = $dados[0]; $time = $dados[1]; if($nome != $usuario){ $n = count($usuarios); $usuarios[$n]["nome"] = $nome; $usuarios[$n]["time"] = $time; } } $fd = fopen($arquivo, "w"); for($i=0;$i<count($usuarios);$i++) fputs($fd, $usuarios[$i]["nome"] . "|" . $usuarios[$i]["time"] . "\n"); fclose($fd); $this->mensagem_saida_usuario($usuario); } function mensagem_entrada_usuario($usuario){ $dados["de"] = $usuario; $dados["para"] = ""; $dados["mensagem"] = $this->MsgEntrada; $dados["privativa"] = ""; $dados["tipo"] = 0; $dados["imagem"] = ""; $dados["som"] = ""; $this->postar_mensagem($dados); } function mensagem_saida_usuario($usuario){ $dados["de"] = $usuario; $dados["para"] = ""; $dados["mensagem"] = $this->MsgSaida; $dados["privativa"] = ""; $dados["tipo"] = 0; $dados["imagem"] = ""; $dados["som"] = ""; $this->postar_mensagem($dados); } function usuarios(){ $arquivo = $this->path . $this->sala . ".sts"; $fd = fopen($arquivo, "r"); $conteudo = fread($fd, filesize($arquivo)); fclose($fd); $ar_lines = explode("\n", $conteudo); for($i=0;$i<count($ar_lines)-1;$i++){ $dados = explode("|", $ar_lines[$i]); $nome = $dados[0]; if(!$this->ContidoArray($nome, $usuarios)) $usuarios[count($usuarios)] = $nome; } return $usuarios; } function existe_mensagens($qtdmsgs){ if(!$qtdmsgs) return true; $qtd_linhas = $this->qtd_linhas(); if($qtd_linhas > $qtdmsgs) return true; else return false; } function obter_mensagens($qtdmsgs){ if(!$qtdmsgs) return; $chaves = "de,para,mensagem,privativa,tipo,imagem,som"; $chaves = explode(",",$chaves); $arquivo = $this->path . $this->sala . ".cho"; $fd = fopen($arquivo, "r"); $conteudo = fread($fd, filesize($arquivo)); $ar_lines = explode("\n", $conteudo); for($i=$qtdmsgs-1;$i<count($ar_lines)-1;$i++){ $tmp_dados = explode("|", substr($ar_lines[$i], 0, -1)); for($j=0;$j<count($chaves);$j++) $dados[$chaves[$j]] = $tmp_dados[$j]; $ar[count($ar)] = $dados; } return $ar; } function mensagem_propria($usuario){ if($usuario == $this->usuario) return true; else return false; } function desconecta_usuario(){ $arquivo = $this->path . $this->sala . ".sts"; $fd = fopen($arquivo, "r"); $conteudo = fread($fd, filesize($arquivo)); fclose($fd); $ar_lines = explode("\n", $conteudo); for($i=0;$i<count($ar_lines)-1;$i++){ $dados = explode("|", $ar_lines[$i]); $nome = $dados[0]; $time = $dados[1]; if($this->usuario!=$nome){ $n = count($usuarios); $usuarios[$n]["nome"] = $nome; $usuarios[$n]["time"] = $time; } } $fd = fopen($arquivo, "w"); for($i=0;$i<count($usuarios);$i++) fputs($fd, $usuarios[$i]["nome"] . "|" . $usuarios[$i]["time"] . "\n"); fclose($fd); $this->cria_arquivo_usuarios(); } function postar_mensagem($dados){ $chaves = array_keys($dados); for($i=0;$i<count($chaves);$i++){ $dados[$chaves[$i]] = $this->LimparBarras($dados[$chaves[$i]]);} for($i=0;$i<count($chaves);$i++) $msg.=$dados[$chaves[$i]]."|"; $msg.="\n"; $arquivo = $this->path . $this->sala . ".cho"; $fd = fopen($arquivo, "a"); fputs($fd, $msg); fclose($fd); } function qtd_linhas(){ $arquivo = $this->path . $this->sala . ".cho"; $fd = fopen($arquivo, "r"); $conteudo = fread($fd, filesize($arquivo)); $ar_lines = explode("\n", $conteudo); return count($ar_lines); } function salas(){ $dir = opendir("salas"); $i=0; while($files = readdir($dir)) if(substr($files, strlen($files) - 3)=="cho"){ $salas[$i] = substr($files, 0, strlen($files)-4); $i++; } if(count($salas)!=0) sort($salas); return $salas; } function ContidoArray($item, $array){ for($i=0;$i<count($array);$i++){ if($item==$array[$i]) return true; } return false; } function LimparBarras($t){ return str_replace("|", " ", $t); } } ?> func_inc.php <? function DropListAcoes($type){ global $path_chat; $c = new chat; $c->path = $path_chat; $ar_acoes = $c->type; for($i=0;$i<count($ar_acoes);$i++) $ar_drop = add_array($ar_drop, $ar_acoes[$i], $i); return drop_down_array("tipo", $ar_drop, $type, 1);; } function DropListSounds(){ global $path_chat; $c = new chat; $c->path = $path_chat; $ar_sounds = $c->Sound; $ar_drop = add_array($ar_drop, "enviar som: ", "", 0); for($i=0;$i<count($ar_sounds);$i++){ $nome_som = strtoupper(substr($ar_sounds[$i], 0,1)) . substr($ar_sounds[$i], 1, strlen($ar_sounds[$i]) - 5); $ar_drop = add_array($ar_drop, $nome_som, $ar_sounds[$i]); } return drop_down_array("som", $ar_drop, "", 1);; } function DropListImages(){ $c = new chat; $ar_images = $c->FileImg; $ar_names = $c->DescImg; $ar_drop = add_array($ar_drop, "enviar imagem: ", "", 0); for($i=0;$i<count($ar_images);$i++) $ar_drop = add_array($ar_drop, $ar_names[$i], $ar_images[$i]); return drop_down_array("imagem", $ar_drop, "", 1);; } function DropListUsuarios($sala, $to){ $c = new chat; $c->sala = $sala; $ar_usuarios = $c->usuarios(); $ar_drop = add_array($ar_drop, "TODOS(".count($ar_usuarios).")", "", 0); for($i=0;$i<count($ar_usuarios);$i++) $ar_drop = add_array($ar_drop, $ar_usuarios[$i]); return drop_down_array("para", $ar_drop, $to, 1); } function Formulario($sala){ global $usuario, $private, $para, $sala, $tipo; if($private) $ckeck_private = '<input type="checkbox" name="private" value="1" checked>'; else $ckeck_private = '<input type="checkbox" name="private" value="1">'; $t = new template; $t->LoadTemplate("post.htm"); $t->UpdateVar("drop_down_acoes", DropListAcoes($tipo)); $t->UpdateVar("usuario", $usuario); $t->UpdateVar("sala", $sala); $t->UpdateVar("drop_down_usuarios", DropListUsuarios($sala, $para)); $t->UpdateVar("drop_down_som", DropListSounds()); $t->UpdateVar("drop_down_images", DropListImages()); $t->UpdateVar("check_private" , $ckeck_private); $t->UpdateVar("sala", $sala); return $t->GetCode(); } function drop_down_array($nome_campo, $array, $selecionado="", $retorno=0){ $output.='<select name="'.$nome_campo.'" class="textbox">'; for($i=0;$i<count($array);$i++) $output.='<option value="'.$array[$i][0].'"'.igual($array[$i][0],$selecionado).'>'.$array[$i][1].'</option>'; $output.='</select>'; if($retorno) return $output; else echo $output; } function add_array($array, $vlr, $exibe="", $muda=1){ if(!strlen($exibe)){ if($muda) $exibe = $vlr; } $tamanho = count($array); $array[$tamanho][0] = $exibe; $array[$tamanho][1] = $vlr; return $array; } function igual($v1, $v2){ if($v1==$v2) return " selected "; } /**************************************************************************/ function RetirarQuebraLinha($string){ $ar = explode("\n", $string); for($i=0;$i<count($ar);$i++) $output.=$ar[$i]; return $output; } function GetOutPutMessages($mensagens){ for($i=0;$i<count($mensagens);$i++) $output.= GetMessage($mensagens[$i]); return $output; } function GetMessage($dados, $force=0){ global $usuario; $obj = new chat; /******************************************************************************** **/ /*caso a mensagem seja do proprio usuario, e nao for mensagem de saida ou entrada, retorno sem fazer nada*/ if(!$force) if($dados["de"] == $usuario and !($dados["mensagem"]==$obj->MsgEntrada or $dados["mensagem"]==$obj->MsgSaida)) return; /******************************************************************************** **/ /*caso nao tenha conteudo na mensagem, imagem, ou som, saio retorno sem fazer nada*/ if(!strlen($dados["mensagem"]) and !strlen($dados["imagem"]) and !strlen($dados["som"])) return; /******************************************************************************** **/ /*previne a exibicao de mensagens privadas para quem não é destinatario da mensagem*/ if($dados["privativa"]) if($dados["para"]!=$usuario and $dados["de"]!=$usuario and $dados["para"]) return; /******************************************************************************** **/ $output = '<p>'; if(($dados["para"]==$usuario or $dados["de"]==$usuario) and $dados["mensagem"]!="") $output.= H_Table(); $output.= TimeMessage(date("H:m:i")); $output.= NomeFrom($dados["de"]); $output.= PrivateMessage($dados["privativa"]); $output.= TipoMessage($obj->type[$dados["tipo"]], $dados["para"], $dados["privativa"]); $output.= NomeTo($obj->type[$dados["tipo"]], $dados["para"], $dados["privativa"]); $output.= Message($dados["mensagem"], $obj->type[$dados["tipo"]]); if(($dados["para"]==$usuario or $dados["de"]==$usuario) and $dados["mensagem"]!="") $output.=F_Table(); $output.= '</p>'; /*exibe a imagem caso enviada*/ if($dados["imagem"]) $output.='<p><blockquote> <img src="images/'.$dados["imagem"].'"></blockquote>'; /*toca som caso enviado*/ if($dados["som"]) $output.='<script>parent.PlaySound("sounds/'.$dados["som"].'");</sc\'+\'ript>'; return $output; } function H_Table(){ return '<table bgcolor="#D8D8D8" cellspacing="0" cellpadding="3" border="0"><tr><td>'; } function F_Table(){ return '</td></tr></table>'; } function NomeFrom($var){ global $usuario; $output = '<b>' . $var . '</b>'; return $output; } function PrivateMessage($private){ if($private) return '<i> reservadamente </i>'; } function TimeMessage($var){ return '<small>('.$var.') </small>'; } function TipoMessage($tipo, $to, $private){ if($tipo=="fala para" and !$to and !$private) return; return " <i>" . $tipo . ' </i>'; } function NomeTo($tipo, $to, $private){ if(!$to){ if($tipo=="fala para" and !$private) return ': '; else return 'TODOS: '; } return $to . ': '; } function Message($msg, $type){ if($type=="grita com") return '<font size=+2>'.$msg.'</font>'; else return $msg; } /******************************************************************************** **************************************************/ class template{var $code;function template($caminho=""){if(strlen($caminho)>256){$this->PutCode($caminho);return;}if(strlen($caminho)!=0){if(!file_exists($caminho))$this-PutCode($caminho);else$this->LoadTemplate($caminho);}}function LoadTemplate($caminho){if(strlen($caminho)>256){$this->PutCode($caminho);$this->CleanTemplate();return;}if(!strlen($caminho))exit("Não nformado o arquivo de template");if(!file_exists($caminho))exit("O arquivo de template <b>".$caminho."</b> não foi encontrado." );$fd=fopen($caminho,"r");$this->code=fread($fd,filesize($caminho));$this->CleanTemplate();fclose ($fd);}function CleanTemplate(){$this->code=str_replace("<!-- ","<!--",$this->code);$this->code=str_replace(" -->","-->",$this->code);$this->code=str_replace("<!--","<!--",$this->code);$this->code=str_replace("-->","-->",$this->code);}function UpdateVar($nome_var,$valor_var){$nome_var="<!--".$nome_var."-->";$this->code=str_replace($nome_var,$valor_var,$this->code);}function chaPosicao($str){return strpos($this->code,$str);}function LoadBlock($block){if(!strlen($this->code))exit("Template não carregado");$start_pos=$this->AchaPosicao("<!--inicio_".$block."-->")+14+strlen($block);$finish_pos=$this->AchaPosicao("<!--fim_".$block."-->");if(!$start_pos or !$finish_pos)exit("Bloco <b>" . $block . "</b> não encontrado");return substr($this->code,$start_pos,$finish_pos - $start_pos);}function UpdateBlock($block,$var){while(true){$start_pos=$this->AchaPosicao("<!--inicio_".$block."-->");$finish_pos=$this->AchaPosicao("<!--fim_".$block."-->")+11+strlen($block);if(!$start_pos or !$finish_pos)return;$header=substr($this->code,0,$start_pos);$footer=substr($this->code,+$finish_pos);$this->code=$header.$var.$footer;}}function RemoveBlock($block){$this->UpdateBlock($block,"");}function GetCode(){return $this->code;}function PutCode($codigo){$this->code=$codigo;}function Campos(){$codigo=$this->code;$pos_inicial=0;$i=0;$tamanho=strlen($codigo);while(true){$pos_ini_char=strpos($codigo,"<!--",$pos_inicial);if(!is_integer($pos_ini_char))break;$pos_ini_char+=4;$pos_fim_char=strpos($codigo,"-->",$pos_ini_char);if(!is_integer($pos_fim_char))exit("Template informado com sintaxe inválida,não foi possível determinar os campos.");$elemento[$i]=substr($codigo,$pos_ini_char,$pos_fim_char - $pos_ini_char);$i++;$pos_inicial=$pos_fim_char+3;}return $elemento;}function ExisteVar($nome){$string="<--".$nome."-->";if(!strlen(strpos($this->codigo,$string)))return false;else return true;}function ExisteBlock($nome){$string1="<--inicio_".$nome."-->";$string2="<--fim_".$nome."-->";if(!strlen(strpos($this->codigo,$string1)) or !strlen(strpos($this->codigo,$string2)))return false;else return true;}function ResetVars(){$campos=$this->Campos();for($i=0;$i<count($campos);$i++)$this->UpdateVar($campos[$i],"");}} ?> Também tem outros arquivos. Mas como principal há esse: chat.php <? session_start(); require("chat.inc.php"); //removo as vars registradas session_unregister("html_carregado"); session_unregister("qtdmsgs"); session_register("qtdmsgs"); //registro a variavel q conta as mensagens //crio o objeto e defino as configuracoes $obj = new chat; $obj->sala = $sala; $obj->usuario = $usuario; if($obj->existe_usuario()){ header("Location: index.php?msg=" . urlencode("Já existe um usuário com este nome na sala, por favor, escolha outro nome.")); exit(); } $obj->sinal(); $obj->atualiza_status(); $qtdmsgs = $obj->qtd_linhas(); $obj->mensagem_entrada_usuario($usuario); ?> <script language="Javascript" src="script_js.php?sala=<?echo $sala?>&usuario=<?echo $usuario?>"></script> <title>TXTChat</title> <frameset rows="0,70,*,80" cols="*" frameborder="no" border="0"> <frame src="trafego.php?sala=<?echo $sala?>&usuario=<?echo $usuario?>" name="trafego" frameborder="no" scrolling="default" noresize border="0"> <frame src="topo.php?sala=<?echo $sala?>&usuario=<?echo $usuario?>" name="topo" frameborder="no" noresize scrolling="no" border="0"> <frame src="mensagens.htm" name="mensagens" frameborder="no" scrolling="yes" noresize border="0"> <frame src="post.php?sala=<?echo $sala?>&usuario=<?echo $usuario?>" frameborder="no" scrolling="no" noresize border="0"> </frameset><noframes></noframes> Compartilhar este post Link para o post Compartilhar em outros sites
ClicksFavoritos 0 Denunciar post Postado Junho 12, 2003 Verifique se você fez as configuraçõe exigidas nos arquivos de ajuda. Como por exemplo os PATHS onde serão salvas as sessões, etc. Compartilhar este post Link para o post Compartilhar em outros sites