PHP, javascript, HTML hogyan lehet egy egyszerű chat féleséget csinálni egy sima text fájllal?
Pont, hogy text fájlba nem csinálnék ilyet. Természetesen nem lehetetlen, de... ha belegondolsz
1) idővel ez a chat beszélgetés igen nagyra nyúlna, ami miatt a programod egyre lassabb lenne
2) mi van akkor, ha pontosan ugyanabban az időpontban küldenek el egy üzenetet?
3) nehezen kezelhető
A PHP programodnak két dolgot kell tudnia:
1) Meg kell tudnia mondani, hogy egy adott időpont óta jött-e újabb üzenet.
2) Le kell tudni kérdezni az üzeneteket egy adott időponttól kezdve.
Ehhez tárolnod kell PHP oldalon:
- Az üzenet feladójának nevét
- Az üzenet elküldésének időpontját
- Az üzenet szövegét
Továbbá szükséged lesz egy kliensoldali JavaScript programra, ami:
- Tudja, hogy mikor volt az utolsó frissítés
- Mondjuk 5 másodpercenként megkérdezi a PHP programtól, hogy van-e új üzenet az utolsó frissítés időpontja óta
- Ha van, letölti az új üzeneteket és megjeleníti azokat.
" mi van akkor, ha pontosan ugyanabban az időpontban küldenek el egy üzenetet?"
Mi lenne? A win szerverek alapból lockolják a file-t, a linux/unix alatt meg ott a flock.
És a szövegfile igenis megfelelő ilyesmihez.
Te sem igen írtál még e-mailen kívül semmit, banyek...
"A win szerverek alapból lockolják a file-t"
Szóval akkor a két üzenet közül az egyiket elveszíted.
Igazad van, én vagyok a kontár. Majd ha arrafelé jársz, dobd már ki a PTI diplomámat, légy szíves.
Ha valami egyszerű kell akkor lehet olyat, hogy pl. van egy szövegdoboz a chat üzeneteknek, és amikor a felhasználó rányom hogy küldés, javascript-ben AJAX-al (XMLHttpRequest) elküldöd a PHP-nak az üzenetet. (persze sima formmal is meg lehet oldani, Javascript és AJAX nélkül). A PHP megkapja az üzenetet ($_POST), és file_put_contents-el FILE_APPEND-el a szövegfájl végére fűzi ( [link] , 2. példa), szükség szerint a küldés idejével és névvel együtt.
A szövegdoboz felett van egy div, amibe a Javascript valahány másodpercenként lekéri a txt fájlt (XMLHttpRequest, setInterval). Ez is megoldható akár JS nélkül is, iframe és meta refresh használatával. Lehet long pollinggal optimizálni a dolgot, tehát a szerver addig vár a válasz visszaküldésével amíg nem történik változás. Az oda-vissza WebSocket meg még jobb lenne, de mivel egyszerű PHP/JS/HTML-ről van szó, az kiesik.
Persze ez nem egy optimális megoldás, mert pl. jobb lenne, ha csak az új üzeneteket töltenénk le, tehát ilyet biztos nem használnék nyilvános oldalon, de gyakorlásnak jó lehet. Egy adatbázisban eltárolva már megoldható, hogy csak az új üzeneteket kelljen letölteni, meg hogy ha senkit sem érdekelnek az egy éves üzenetek, akkor azok csak akkor töltődjenek le, ha valaki felgörget oda.
Arra figyelni kell, már csak XSS megakadályozása miatt is, hogy a felhasználótól kapott bemenetet mindenképp szűrjük (lásd htmlspecialchars függvény, XSS)
Chat "féleséget" manapság websocket-el írjuk.
Vannak komplex példák is.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!