SERWIS
Rozbudowany chat
O skrypcie
W tym artykule opisze w jaki sposób zrobić
chat, który jedynie potrzebuje serwera z obsługą
PHP.
Skrypt ten będzie dzielić okno przeglądarki
za pomocą ramek na dwie części, w dolnej będziemy
wpisywać tekst, a w górnej będą pojawiać
się wpisy.
Charakterystyka dolnej ramki:
1. Będzie zawierać 6 pól (5 wyboru, 1 do
wpisania tekstu) i przycisk do wysyłania.
2. Pole do wpisywania tekstu będzie
automatycznie aktywne po wysłaniu tekstu, dzięki
użyciu JavaScript`u.
3. Będzie zawierać przycisk do "Wylogowania".
4. Będzie zawierać przycisk do przeglądania
emotikon.
5. Będzie zawierać przycisk do historii.
Charakterystyka górnej ramki:
1. Będzie odświeżać za pomocą znacznika
META.
2. Będzie zawierać kolor tła (bgcolor).
3. Będzie wyświetlać 19lini.
Plusy i minusy skryptu
Plusy:
+ zawiera sporo formatowań tekstu (posiada
takie: kolor tekstu, wielkość liter,
pogrubienie tekstu, kapitaliki tekstu, kolor
nicku) wszystkie te funkcje posiadają kilka
pozycji w formularzy wyboru.
+ można go dowolnie rozbudowywać i
modyfikować
+ nie posiada żadnych bannerów reklamowych
+ zawiera emotikony
+ jest poprawnie interpretowany przez większość
przeglądarek
Minusy:
- mruganie podczas odświeżania
- może wywalać podczas wolnych łącz
- polskie litery mogą być źle odczytane (jeśli
przeglądarka będzie używać innego
kodowania niż ISO)
Użyte pliki:
admin.php - zawiera narzędzia administrujące
(takie jak: banowanie i dodawanie komentarzy
bez logowania).
chat.php - zawiera definicje ramek i skrypt
dodający usera.
hent.php - wyświetla rozmowę.
history.htm - plik w którym jest zapisywana
rozmowa.
index.php - zawiera skrypt do logowania i
podgląd chatu.
logaf.php - zawiera skrypt do wylogowania.
obraz.htm - plik z wykazem emotikon.
outlog.htm - plik po wylogowaniu.
skriv.php - zawiera dolną ramkę, skrypt
dodający rozmowę i kod emotikon.
styl.css - kaskadowy arkusz stylów.
Gotowy skrypt z opisem:
admin.php
<?
$password = "admin"; //
haslo admina
if($action == "doit"
&& $pass == $password)
{
$fil = "history.htm"; //
plik do ktorego ma byc dodany komentaz
$str = "<TABLE><tr><td
colspan="1"><I><font
face="Arial" size="2"
color="#FF0000"><b>".date("H:i:s",time())."
Komentarz:</b> $chatten</font></I></td></tr></TABLE>
"; // formatowanie tekstu
komentarza
$fp = fopen($fil, r);
if($fp)
{
$fileArray = file($fil);
$result = implode("", $fileArray);
$result = "$str$result";
fclose($fp);
}
$fp = fopen($fil, w);
if($fp)
{
fputs($fp,$result);
fclose($fp);
}
}
?>
<html>
<meta http-equiv="Pragma"
Content="no-cache">
<meta http-equiv="Refresh"
Content="60"> // co ile
sec. ma byc odswiezany obraz
<CENTER>
<IFRAME src="history.htm"
Width="490" hight="200"
scrolling="no"></IFRAME>
// wielkosc plywajacej ramki
<BR><BR>narzędzia admina
;)))
<BR><BR>
<font face="verdana">
<form action="admin.php"
method="post">
<input type="hidden" name="action"
value="doit">
Haslo:<BR> <input type="password"
name="pass" value="<?
echo("$pass");
?>"><br>
Komentarz:<BR> <input type="text"
name="chatten"><br>
<input type="submit"
value="Wyslij">
</form>
</font>
<BR><BR><BR>
<?
$password = "ban8520ban"; //
haslo do banowania
if($action == "doit"
&& $pass == $password)
{
$fil = ".htaccess"; //
najczestrzy plik ktory umozliwia
zakazanie komputerowi z danego IP lub
hosta oczytywac dane, jesli w Twoim
serwerzejest inny to wpisz ja
$str = "deny from ";
$fp = fopen($fil, r);
if($fp)
{
$fileArray = file($fil);
$result = implode("", $fileArray);
$result = "$str$result";
fclose($fp);
}
$fp = fopen($fil, w);
if($fp)
{
fputs($fp,$result);
fclose($fp);
}
}
?>
<BR>
<font face="verdana">
<form action="admin.php"
method="post">
<input type="hidden" name="action"
value="doit">
Haslo:<BR> <input type="password"
name="pass" value="<?
echo("$pass");
?>"><br>
Banuj (z IP, host lub serwer
proxy):<BR> <input type="text"
name="chatten"><br>
<input type="submit"
value="Wyslij">
</form>
</font>
</CENTER>
</html>
chat.php
<?
header("Cache-Control: no-cache");
header("Pragma: no-cache");
setcookie("$coknavn");
if($navn==admin10) // twoj nick i
haslo
{
$navn = "admin <B><I>(admin)</I></B>";
// co ma byc wyswietlone
}
if($navn == $coknavn)
{
header("refresh: 1; url=logaf.php?action=logaf&navn=$navn&doh=nisser");
print("<font face="verdana">Zaraz
obraz zostanie odswiezony...</font>");
exit;
}
elseif($navn == "chatten" or
$navn == "Chatten" or $navn
== "")
{
header("refresh: 2; url=index.php");
echo("<font face="verdana">Zaraz
obraz zostanie odswiezony...</font>");
exit;
}
setcookie("coknavn","$navn",time()+1440);
setcookie("online","ja",time()+1440);
$fil = "history.htm";
$str = "<TABLE><tr><td
colspan="1"><font face="verdana"
size="1" color="#FF0000">".date("H:i:s
| d-m-Y")."<B> Chatten:</b>
$navn ($REMOTE_ADDR)
</font></td></tr></TABLE>
";
$fp = fopen($fil, r);
if($fp)
{
$fileArray = file($fil);
$result = implode("", $fileArray);
$result = "$str$result";
fclose($fp);
}
$fp = fopen($fil, w);
if($fp)
{
fputs($fp,$result);
fclose($fp);
}
?>
<html>
<head>
<title>Patt Cafe - v2.5 </title>
</html>
<frameset rows="*,110"
border="0">
<frameset rows="*,1"
border="0">
<frame name="hent" src="hent.php?navn=<?
echo("$navn"); ?>"
scrolling="no" noresize>
<frame name="logaf" src="logaf.php?navn=<?
echo("$navn"); ?>"
scrolling="no" noresize>
</frameset>
<frame name="skriv" src="skriv.php?navn=<?
echo("$navn") ?>"
scrolling="no" noresize>
</frameset>
hent.php
<?
setcookie("$coknavn");
if($navn == $coknavn)
{
header("refresh: 5");
?>
<html>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-2">
<meta http-equiv="Pragma"
Content="no-cache">
<BODY bgcolor="#CCCC99">
<table border="0">
<?
$fcontents = file("history.htm");
while(list($line_num, $line) =
each($fcontents))
{
if($line_num == "0") {
echo("$line"); }
if($line_num == "1") {
echo("$line"); }
if($line_num == "2") {
echo("$line"); }
if($line_num == "3") {
echo("$line"); }
if($line_num == "4") {
echo("$line"); }
if($line_num == "5") {
echo("$line"); }
if($line_num == "6") {
echo("$line"); }
if($line_num == "7") {
echo("$line"); }
if($line_num == "8") {
echo("$line"); }
if($line_num == "9") {
echo("$line"); }
if($line_num == "10") {
echo("$line"); }
if($line_num == "11") {
echo("$line"); }
if($line_num == "12") {
echo("$line"); }
if($line_num == "13") {
echo("$line"); }
if($line_num == "14") {
echo("$line"); }
if($line_num == "15") {
echo("$line"); }
if($line_num == "16") {
echo("$line"); }
if($line_num == "17") {
echo("$line"); }
if($line_num == "18") {
echo("$line"); }
if($line_num == "19") {
echo("$line"); }
}
?>
</table>
</html>
<?
exit;
}
?>
history.htm
<BODY bgcolor="C0C0C0">
//kolor tla historii
index.ph
<?
setcookie("$online");
if($online == "ja")
{
echo("<font face="verdana">Jesteś
online!</font>");
exit;
}
?>
<html>
<head>
<title>Patt Cafe - v2.5</title>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-2">
<meta http-equiv="Pragma"
Content="no-cache">
<meta http-equiv="Refresh"
Content="40">
<BODY bgcolor="#333366"
text="FFFFFF" link="#FFFFFF"
vlink="#FFFFFF">
<STYLE TYPE="text/css">
#przycisk { background-color: #CCCC99;
color: #000000;>
</Style>
<style fprolloverstyle>A:hover {color:
#000099}</style>
</head>
<BODY>
<CENTER>
<nobr>
<BR><BR><BR>
<TABLE WIDTH="500"
background="tlotab.gif"
align="center">
<TR>
<TD>
<CENTER>
<IFRAME src="history.htm"
Width="490" hight="200"
scrolling="no"></IFRAME>
<BR>
<body onload="document.login.navn.focus()">
<script language="javascript"
type="text/javascript">
if (self != top) top.location =
self.location;
</script>
<form action="chat.php"
method="post" name="login">
Login: <input type="text"
maxlength="15" name="navn">
<input type="submit"
value="Wejdz"
id="przycisk">
</form>
<A HREF="obraz.htm" TITLE="Dostępne
obrazki (emiticony)" TARGET="_blank">Obrazki;</A>
</CENTER>
</TD></TR></TABLE>
</CENTER>
</body>
</html>
logaf.php
<?
if($action == "logaf")
{
setcookie("coknavn","udlobet",time()+1);
setcookie("online","nej",time()+1);
$fil = "history.htm";
$str = "<TABLE><tr><td
colspan="1"><font face="verdana"
size="1" color="#0000CC">".date("H:i:s
| d-m-Y")."<B> Chatten:</b>
Opuscil(a) nas $navn
</font></td></tr></TABLE>
";
$fp = fopen($fil, r);
if ($fp)
{
$fileArray = file($fil);
$result = implode("", $fileArray);
$result = "$str$result";
fclose($fp);
}
$fp = fopen($fil, w);
if ($fp)
{
fputs($fp, $result);
fclose($fp);
}
if($doh == "nisser")
{
header("location: index.php");
exit;
}
?>
<SCRIPT Language="JavaScript">
window.close();
</SCRIPT>
<?
exit;
}
?>
<html>
<meta http-equiv="Pragma"
Content="no-cache">
<script language="JavaScript">
var exit=true;
function xit()
{
if (exit)
open("logaf.php?action=logaf&navn=<?
echo("$navn")
?>","_blank","width=1,
height=1, scrollbars=0,status=0,menubar=0,resizable=0,location=0,toolbar=0");
}
</script>
<body onunload="xit()"
>
</body>
</html>
obraz.htm
<Html>
<head>
<meta http-equiv="Content-Type"
content=text/html; charset=iso-8859-2">
<META NAME="Language"
CONTENT="pl">
<META NAME="Author"
CONTENT="Patt">
<title>Patt Cafe - v.2.5 -
Wstawianie obrazkow (emoticon) </title>
<LINK REL=stylesheet HREF="styl.css"
TYPE="text/css">
<BODY bgcolor="#333366"
text="FFFFFF" link="#FFFFFF"
vlink="#FFFFFF">
</head>
<BODY>
<nobr>
<CENTER>Wstawianie obrazkow (emiticon):</CENTER>
<BR>
<BR>
<center>
Wystarczy wpisac nazwe.<BR>
Oto lista rysunkow (obok kazdego
obrazka jest nazwa):<BR><BR>
<TABLE Width="480" BORDER="1"
background="tlotab.gif">
<TR>
<TD>
<IMG SRC="aniol.gif">
:aniol <BR>
<IMG SRC="pyt.gif"> :pyt<BR>
</TD><TD>
<img src="icon_wink.gif">
:mrugniecie<BR> // wazne jest
aby nie dać takiego samego poczatku
dla skrotu tzn. np. :ass i :as skrypt
uzna je za takie same
</TD><TD>
<img src="!.gif">
!!!<BR> // trzeba recznie wpisac
adres do obrazka i jego odpowiednik w
skrocie
<IMG SRC="usmiech.gif">
:)<BR>
</TD></TR>
</TABLE>
</center>
</nobr>
</body>
</html>
outlog.htm
Użyj dowolnej strony dla tego pliku
skriv.php
<?
setcookie("$coknavn");
if($navn && $skriv &&
strlen($skriv)<=100 && $coknavn
== $navn)
{
setcookie("coknavn","$navn");
$skriv = ereg_replace("<","<",$skriv);
$skriv = ereg_replace(">",">",$skriv);
$skriv = ereg_replace(":)","<img
src="usmiech.gif" border="0">",$skriv);
// wystarczy dopisywac nastepne linie
w tym samym stylu co te, wazne jest
aby nie dublowac poczatku
$skriv = ereg_replace(":pyt","<img
src="pyt.gif" border="0">",$skriv);
//mozna ten klopot niwelowac dajac
inna cyfre do kazdego konca skrotu
$skriv = ereg_replace(":aniol","<img
src="aniol.gif" border="0">",$skriv);
$skriv = ereg_replace("!!!","<img
src="!.gif" border="0">",$skriv);
$fil = "history.htm";
$str = "<TABLE><tr><td><font
face="verdana" size="1"
color="$coloruser"><b>".date("H:i:s",time())."
$navn:</b></font><font
face="verdana" size="$wielkoscx"
color="$farve" style="font-weight:
$gruboscx" style="font-variant:
$kapitalikix"> $skriv</font></td></tr></TABLE>
";
$fp = fopen($fil, r);
if ($fp)
{
$fileArray = file($fil);
$result = implode("", $fileArray);
$result = "$str$result";
fclose($fp);
}
$fp = fopen($fil, w);
if ($fp)
{
fputs($fp, $result);
fclose($fp);
}
}
?>
<html>
<meta http-equiv="Pragma"
Content="no-cache">
<BODY bgcolor="#333366"
text="FFFFFF" link="#FFFFFF"
vlink="#FFFFFF">
<STYLE TYPE="text/css">
#przycisk { background-color: #CCCC99;
color: #000000;>
</Style>
<style fprolloverstyle>A:hover {color:
#000099}</style>
<body onload="document.submit_form.skriv.focus()">
<CENTER>
<form action="skriv.php"
method="post" name="submit_form">
<input type="hidden" name="navn"
value="<? echo("$navn");
?>">
Kolor: <select name="farve">
<? if($farve == "darkred"){
echo("<option value="darkred">Czerwony</option>");
} ?>
<? if($farve == "darkblue"){
echo("<option value="darkblue">Niebieski</option>");
} ?>
<? if($farve == "darkgreen"){
echo("<option value="darkgreen">Zielony</option>");
} ?>
<option value="black">Czarny</option>
<option value="darkred">Czerwony</option>
<option value="darkblue">Niebieski</option>
<option value="darkgreen">Zielony</option>
</select>
<form action="skriv.php"
method="post" name="submit_form">
<input type="hidden" name="navn"
value="<? echo("$navn");
?>">
Wielkosc: <select name="wielkoscx">
<? if($wielkoscx == "1"){
echo("<option value="1">Mniejsza</option>");
} ?>
<? if($wielkoscx == "3"){
echo("<option value="3">Wieksza</option>");
} ?>
<? if($wielkoscx == "4"){
echo("<option value="4">Najwieksza</option>");
} ?>
<option value="2">Standartowa</option>
<option value="1">Mniejsza</option>
<option value="3">Wieksza</option>
<option value="4">Najwieksza</option>
</select>
<form action="skriv.php"
method="post" name="submit_form">
<input type="hidden" name="navn"
value="<? echo("$navn");
?>">
Pogrubienie: <select name="gruboscx">
<? if($gruboscx ==
"700"){
echo("<option value="700">grubsza</option>");
} ?>
<? if($gruboscx ==
"900"){
echo("<option value="900">najgrubsza</option>");
} ?>
<option value="normal">normalna</option>
<option value="700">grubsza</option>
<option value="900">najgrubsza</option>
</select>
<form action="skriv.php"
method="post" name="submit_form">
<input type="hidden" name="navn"
value="<? echo("$navn");
?>">
Kapitaliki: <select name="kapitalikix">
<? if($kapitalikix == "small-caps"){
echo("<option value="small-caps">small-caps</option>");
} ?>
<option value="normal">normalna</option>
<option value="small-caps">small-caps</option>
</select>
<BR>
<form action="skriv.php"
method="post" name="submit_form">
<input type="hidden" name="navn"
value="<? echo("$navn");
?>">
Kolor nick`u: <select name="coloruser">
<? if($coloruser ==
"#0000FF"){
echo("<option value="#0000FF">Niebieski</option>");
} ?>
<? if($coloruser ==
"#000099"){
echo("<option value="#000099">Granatowy</option>");
} ?>
<? if($coloruser ==
"#00FF00"){
echo("<option value="#00FF00">Zielony</option>");
} ?>
<? if($coloruser ==
"#CCCC99"){
echo("<option value="#CCCC99">Niewidoczny</option>");
} ?>
<? if($coloruser ==
"#FF9933"){
echo("<option value="#FF9933">Pomaranczowy</option>");
} ?>
<? if($coloruser ==
"#FFFF00"){
echo("<option value="#FFFF00">Zolty</option>");
} ?>
<? if($coloruser ==
"#FF00FF"){
echo("<option value="#FF00FF">Rozowy</option>");
} ?>
<option value="#000000">Czarny</option>
<option value="#0000FF">Niebieski</option>
<option value="#000099">Granatowy</option>
<option value="#00FF00">Zielony</option>
<option value="#CCCC99">Niewidoczny</option>
<option value="#FF9933">Pomaranczowy</option>
<option value="#FFFF00">Zolty</option>
<option value="#FF00FF">Rozowy</option>
</select>
  <input type="text"
maxlength="100" name="skriv">
<input type="submit" name="send"
id="przycisk" value="Wyslij">
</form>
</CENTER>
<nobr>
<A HREF="outlog.htm"
TITLE="Wyloguj sie" TARGET="_top">Wyloguj
sie;</A>    
<A HREF="obraz.htm" TITLE="Dostepne
obrazki (emiticony)" TARGET="_blank">Obrazki;</A>
   
<A HREF="historia.htm"
TITLE="Historia" TARGET="_blank">History;</A>
</nobr>
</body>
</html>
styl.css
<STYLE TYPE="text/css">
BODY { font: 12 Arial; color: #FF0000
}
#przycisk { background-color: #000099;
color: #FFFF00;>
</Style>
<STYLE type="text/css">
<!--
BODY {
scrollbar-face-color: #000000;
scrollbar-highlight-color: #000000;
scrollbar-3dlight-color: #FF0000;
scrollbar-darkshadow-color: #000000;
scrollbar-shadow-color: #FF0000;
scrollbar-arrow-color: #FFFFFF;
scrollbar-track-color: #000000;
}
-->
</STYLE>
Zakończenie:
To jest już koniec skryptu :) mam nadzieje,
że przyda Wam się ten skrypt :)
UWAGA: Należy ustawić chmod 666 na
pliki history.htm
Autor nie ponosi żadnej
odpowiedzialności
za ewentualne szkody mogące wyniknąć
z błędu w skrypcie.
Autor:
Patryk Lisikiewicz "Patt"
Home Page: www.pattpage.prv.pl
<== WSTECZ
=
R E K L A M A