Chat selber programmieren

nein. eine session gehört immer zu einem benutzer. wie soll ein benutzer auf die session eines anderen benutzers zugreiffen können? dazu bräuchte er die session-ID.
 
was is denn daran so kompliziert?
beim auslesen der beiträge kommt ne if abfrage rein, also in pseudocode:


while(ende der datenbank/datei erreicht)
{
if (datum_des_texts > loginzeit)
{
echo "text";
}
}

sollte doch keine große sache sein.
 
Nein das hatte ich schon verstanden nur ich versuche gerade nochein paar andere möglichkeiten auszubaldowern.

Ausserdem hätte ich noch folgendes Problem:

Wenn ich den schon geschriebenen Text in einer Datenbank speicher wird diese nach einiger Zeit (ODER vlt. auch schon nach kurzer) ziemlich voll. Beim Speichern in eine txt Datei wüsste ich nicht wie ich das Datum/Uhrzeit speichern bzw. wieder herausfiltern könnte.
 
Zuletzt bearbeitet:
das speichern in der txt datei machste am einfachsten in der art:

timestamp1=|=text1
timestamp2=|=text2
usw.

dann kannste die datei mit dem befehl file() auslesen. dadurch haste ein array mit den einzelnen zeilen.
die zeilen kannste dann wieder durch explode() in 2 teile teilen.

etwa so:
Code:
$file=file("datei.txt"); // datei auslesen
foreach ($file as $zeile) // alle zeilen durchschleifen
{
$zeile=explode("=|=",$zeile); // einzelne zeile in 2 teile teilen, ab dem trennzeichen =|=
echo "Timestamp: $zeile[0]<br>";  // ausgabe der zeit
echo "Text: $zeile[1]"; // ausgabe des textes
}


hoffe es ist verständlich genug

kannst auch theoretisch bei der schleife noch ne varibale hochzählen und dann bspw wenn die datei 100 zeilen hat, die datei/datenbank leeren.
 
Wunderbar vielen dank.
Aber e s häufen sich im mom immer mehr fragen bei mir.
Wie könnte ich es denn hinbekommen, das sich der Text verändert ohne diesen dämlichen refresh. ich weiss zwar, das das mit Ajax funktioniert aber ich habe nirgendswo was dazu gefunden wie man den geschriebenen Text einfach direkt an die benutzer schickt.
 
gibt auch den befehl flush().
damit würde das auch gehen zusammen mit dem befehl sleep() oder usleep.

geht aber nich auf jedem server. unter windows geht glaub garnich. unter linux muss php glaub als apachemodule laufen.
 
Naja aber so wie nachlesen konnte funktioniert das nur eingeschränkt. Das mit dem Ajax wäre doch irgendwie die elegantere lösung. Sorry stehe da gerade auf dem Schlauch. Habe versucht was geeignetes zu finden. Fand aber ncihts.

Bei flush() habe ich etwas gefunden wie:
Leert den Puffer des Servers und sendet die auszugebenen Daten dem User sofort zu anstatt zu warten bis die komplette Seite fertig erstellt ist. Ermöglicht somit ein schnelleres Anzeigen der Inhalte auf dem Bildschirm.

Achtung: Der Befehl funktioniert nur, wenn PHP direkten Zugriff auf den Buffer des Servers hat. Dies ist nicht der Fall, wenn PHP als CGI-Version (also auch unter Windows) installiert ist. Bei Apache mit PHP-Modul hingegen funktioniert es.

Das sagt mir irgendwie als wenn er den Refresh des einzelnden Benutzers erzwingen würde.
Und ein Refresh der Seite wäre eher ungeeignet.
Die Sache ist ja, es sollte schon überall funktionieren.
 
Zuletzt bearbeitet:
Keiner mehr eine Idee?
 
flush() refresht die seite beim user nicht.
im grunde wird die seite einfach nicht fertig geladen, sondern immer ans ende der seite halt noch was hinzugefügt.

ajax kenn ich jetzt nicht.


aber bei mir hat flush wunderbar funktioniert.


funktioniert recht einfach. ne endlosschleife programmieren und da dann die datei/datenbank auslesen.

Code:
while (0!=1)
{
// Datei/Datenbank auslesen, neuste zeile in variable $text schreiben

echo "$text<br>";
flush();
sleep(1);
}

so in etwa dürfte das funktionieren. beim auslesen musste halt dann noch jeweils prüfen ob die neuste zeile in der datenbank/datei auch neuer ist, als die letzte die ausgegeben wurde (sonst wird immer dasselbe ausgegeben).

problem an der sache ist nur, dass es sehr serverlastig ist. schließlich wird jede sekunde auf die datenbank/datei zugegriffen. bei 20 leuten im chat, wären das 20 zugriffe/sekunde nur fürs auslesen.
 
Und mit dieser endlosschleife funktioniert es? Gibt es da nicht noch das Proble, dass der rest der Seite nicht eher aufgebaut wird bevor diese schleife nicht vorbei ist. Ich weiss das cih jetzt leicht nerven könnte aber es sollte eigentlich so sein das der text danna uftaucht wenn er von irgendein user geschrieben wurde. mit diesem script kann es ja passieren das auf einmal 5 texte auf einmal auftauchen weil inherhal der einen sekunde 5 mal geschrieben wurde.
 
klar kann sowas passieren, das halt plötzlich 5 zeilen auftauchen.
aber das probleme kannste minimieren, indem du statt sleep() eben usleep(microsekunden) nimmst.

problem ist halt, das dadurch die serverlast nochmals steigt, da ja pro sekunde dann noch mehr zugriffe auf datenbank/datei sind.


problem beim laden der webseite gibt es eigentlich keine. höchstens wenn die struktur der seite so aussähe:

Code:
<table>
<tr>
<td>Menu</td>
<td>Chat-Ausgabe</td>
<td>Menu 2</td>
</tr>
</table>

in dem fall würde also die rechte spalte der tabelle nie sichtbar sein, da die mittlere mit dem chat ja nie fertig geladen ist.

ich hatte meinen chat immer in nem popup laufen.
 
Ja das wäre ebenfalls ne Möglichkeuit ist auch ne wunderbare sache. Das mit der Serverlastigkeit wäre mir im Moment ja eh egal aber es tritt genau das auf dass ich ich vor UND nach der Chat ausgabe etwas habe. Könnte man so etwas mit nem iframe oder etwas in der art regeln oder gibt es so wieder komplett andere möglichkeiten?
 
mit nem iframe wäre das ne lösung. was anderes viele mir da auch nicht ein.

weiß aber nicht wie es mittlerweile mit der iframe-unterstütztung der browser aussieht.
vor paar jahren, als ich meinen chat gebaut habe, gingen iframes glaub nur mit internet explorer.
 
Zurück
Oben