YGREG.COM - Kurs PHP - Część 6 http://www.ygreg.com/druk.php?php6 Kurs PHP - Część 6 Ogólny zarys skryptu W tym rozdziale opiszę krok po kroku tworzenie skryptu obsługującego prostego chata. Gotowy do u\ycia skrypt mo\na ściągnąć (http://ygreg.and.pl/php/kurs/chat.zip) stąd. Okno przeglądarki podzielimy ramkami na dwie części. W dolnej będzie znajdował się formularz, zawierający jedno pole do wpisywania tekstu, w górnej będzie wyświetlać się treść rozmowy. Aby uniknąć u\ycia Javy w górnej ramce umieścimy znacznik META powodujący odświe\enie zawartości co 1 sekundę. Skrypt obsługujący formularz umieścimy w tym samym pliku, co formularz. Dięki temu u\ytkownik po wpisaniu linijki tekstu będzie mógł od razu zacząć pisać następną. U\yte pliki HTML Nasz skrypt będzie potrzebował 4 plików. Będą to: index.html - plik zawierający definicję ramek gora.php3 - górna ramka, zawierająca skrypt wyświetlający rozmowę dol.php3 - dolna ramka, zawierająca formularz i skrypt do jego obsługi chat.txt - plik w którym będzie przechowywana treść rozmowy Skrypt w pliku dol.php3 musi mieć mo\liwość zapisu do pliku chat.txt. Teraz przedstawię początkową zawartość tych plików: index.html: =============
YGREG - Chat
gora.php3: ============
CONTENT="text/html; charset=ISO-8859-2">
1 z 9 2010-02-14 21:08 YGREG.COM - Kurs PHP - Część 6 http://www.ygreg.com/druk.php?php6
WIDTH=500 HEIGHT=400>
// tutaj umieścimy skrypt // wyświetlający treść ?>
dol.php3: ===========
content="text/html; charset=iso-8859-2">
Dla zwiększenia czytelności skryptów pola formularza będe zawsze nazywał du\ymi literami. Jak widać w powy\szym pliku będą potrzebne 2 skrypty - wyświetlający treść rozmowy i dodający nową linię. Wyświetlanie treści rozmowy Zaczniemy od skryptu wyświetlającego treść rozmowy w pliku gora.php3. Będzie on czytał kolejne linie z pliku chat.txt i wyświetlał je, rozdzielając tagami
$file=fopen("chat.txt", "r"); flock($file, 1); while($linia=fgets($file, 81)) { echo($linia); 2 z 9 2010-02-14 21:08 YGREG.COM - Kurs PHP - Część 6 http://www.ygreg.com/druk.php?php6 echo(" "); } flock($file, 3); fclose($file); Dodawanie nowej linii Teraz pora na skrypt dodający do pliku linię. Ten będzie ju\ bardziej skomplikowany. Oprócz dodania nowej lini na końcu, trzeba będzie usunąć pierwszą linię pliku, je\eli stanie się on zbyt długi: if($ACTION=="add") // jeśli u\ytkownik dopiero wszedł // na stronę, zmienna $ACTION będzie pusta { $file=fopen("chat.txt", "r"); flock($file, 1); for($lineNr=1;true;$lineNr++) { $linia=fgets($file, 81); // odczytuje kolejną linię z pliku if(!$linia) break; // kończy pętle, jeśli // natrafi na koniec pliku $linie[$lineNr]=$linia; // dopisuje linię do tablicy $linie } flock($file, 3); fclose($file); $nLines=$lineNr; // zapisuje ilość lini // w zmiennej $nLines $file=fopen("chat.txt", "w"); flock($file, 2); if($nLines <16) // je\eli lini jest mniej // ni\ 16 zapisywanie $lineNr=1; // do pliku zacznie się // od pierwszej lini else // je\eli 16 lub więcej, $lineNr=2; // zapisywanie zaczyna się // od 2 lini 3 z 9 2010-02-14 21:08 YGREG.COM - Kurs PHP - Część 6 http://www.ygreg.com/druk.php?php6 for(;$lineNr<$nLines;$lineNr++) // zapisuje kolejne linie fwrite($file, $linie[$lineNr]); fwrite($file, $TEKST); // dopisuje linię // podaną przez u\ytkownika fwrite($file, "\n"); flock($file, 3); fclose($file); } Teraz mo\na ju\ przetestować pierwszą, najprostszą wersję skryptu. Najbardziej ra\ącą niedogodnością jest to, \e po wysłaniu formularza pole do wpisywania tekstu nie jest aktywne i trzeba u\yć myszy, \eby wpisać kolejną linię. Mo\na temu zaradzić stosując bardzo prosty skrypt Javy:
Skrypt ten nale\y dopisać pod formularzem w pliku dol.php3. Teraz po załadowaniu strony dol.php3 pole formularza uaktywnia się automatycznie. Rozró\nianie u\ytkowników Chocia\ skrypt działa ju\ całkiem niezle, cię\ko będzie się w nim dogadać z więcej ni\ jedną osobą. Trzeba dodać mo\liwość wpisania imienia. Ale po wpisaniu imienia, trzeba je gdzieś zapamiętać. Mo\na u\yć 2 sposobów - skorzystać z Cookie, lub ukrytego pola w formularzu. W tym przypadku lepsze będzie ukryte pole - dzięki takiemu rozwiązaniu u\ytkownik będzie mógł przy ponownym wejściu na stronę podać inne imię. Ze strony będą te\ mogły skorzystać osoby, których przeglądarki nie obsługują cookies (jest ich ju\ bardzo mało, ale mo\e jakaś się trafi). Musimy więc stworzyć nowy plik, zawierający formularz do wpisania imienia. Plik imie.htm nale\y wpisać w pliku index.html jako zródło dolnej ramki (zamiast dol.php3). imie.htm ==========
content="text/html; charset=iso-8859-2">
Konieczne będzie te\ dokonanie zmian w pliku dol.php3. Na końcu skryptu obsługującego formularz trzeba dopisać linię: echo(" NAME=IMIE VALUE=$IMIE>"); Spowoduje ona wprowadzanie do formularza ukrytego pola, zawierającego imię u\ytkownika. Nale\y teak\e zmienić linię dodającą nowy tekst do pliku na: fwrite($file, "$IMIE> $TEKST"); Teraz mo\na ju\ swobodnie rozmawiać. Kolory Ka\dy u\ytkownik ma ju\ swoje imię, po którym mo\na go odró\nić od innych. Mo\e jeszcze pozwolić mu na wybór koloru, jakim będzie wyświetlane to imię? Nie będzie z tym z7byt du\o kłopotu. Wystarczy na końcu skryptu w pliku dol.php3 dodać poni\szy fragment kodu: $kolory[0]="black"; $opisy[0]="Czarny"; $kolory[1]="blue"; $opisy[1]="Niebieski"; $kolory[2]="red"; $opisy[2]="Czerwony"; $kolory[3]="green"; $opisy[3]="Zielony"; if($KOLOR=="") $KOLOR="black"; echo(""); A linię wpisującą do pliku nowy tekst zmienić na fwrite($file, " $IMIE> $TEKST"); 5 z 9 2010-02-14 21:08 YGREG.COM - Kurs PHP - Część 6 http://www.ygreg.com/druk.php?php6 W ten sposób zostanie utworzone pole wyboru, zawierające 4 kolory. Po wysłaniu formularza domyślnie zaznaczony będzie ostatnio wybrany kolor. Gotowy skrypt Ostatecznie chat składa się z następujących plików: index.html, imie.htm, dol.php3, gora.php3 i chat.txt. W pliku chat.txt jest zapisywana rozmowa. Pozostałe pliki w ostatecznej formie: index.html ============
YGREG - Chat
imie.htm ==========
content="text/html; charset=iso-8859-2">
dol.php3 ==========
content="text/html; charset=iso-8859-2">
7 z 9 2010-02-14 21:08 YGREG.COM - Kurs PHP - Część 6 http://www.ygreg.com/druk.php?php6
Zakończenie To ju\ koniec tego kursu. Więcej informacji o PHP, jak i gotowe skrypty mo\na znalezć na stronach zamieszczonych w dziale linki. Du\o ciekawych stron mo\na znalezć na oficjalnej stronie PHP. Strona ta ma tak\e bogaty zbiór linków. Grzegorz 'Ygreg' Plebański ygreg@ygreg.com 8 z 9 2010-02-14 21:08 YGREG.COM - Kurs PHP - Część 6 http://www.ygreg.com/druk.php?php6 http://www.ygreg.com http://www.ygreg.com 9 z 9 2010-02-14 21:08