Timestamp stimmt nicht
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
auftritt
ausgeben
basteln
code
datenbank
erleuchtung
genau gleiche systemzeit
grad
idee
jahr
liste
mache
nachricht
problem
session
system
unermessliche wachsen
url
weiteres problem
zugreifen
-
Hallo
Wie ihr vielleicht schon vorher gelesen habt bin ich am Flash-Chat basteln mit serverseitigem PHP und MySQL.
Ich hab ein weiteres Problem das bei meinem PC und Easy-PHP nicht auftritt, auf lima-city aber schon. Um Nachrichten abzurufen verwende ich microtime. Ich speichere die microtime in eine SESSION und sende alle Nachrichten, die nach dieser Zeit gesendet wurden. Es ist ganz einfach:
$e = 7; list($u, $s) = explode(' ',microtime()); $result = bcadd($u, $s, $e); echo $result;
Diesen Code hab ich, einen einfachen, simplen timestamp. Wenn ich dieses PHP-File aufrufe und mehrmals F5 drücke, passiert etwas komisches: Die Timestamps werden nicht immer grösser, wie erwartet, manchmal kommt auch wieder ein Timestamp aus der Vergangenheit (??).
Um das zu veranschaulichen hier eine Liste mit chronologisch aufgerufenen Timestamps:
/1298466566.0339510
/1298466572.9166230
/1298466563.9805490 -> WTF?
/1298466582.4656820
/1298466589.9774070
/1298466591.6393810
/1298466584.6098110 -> WTF?
/1298466602.0141620
/1298466607.0190460
/1298466611.8885360
/1298466605.0697250 -> WTF?
/1298466622.1359060
/1298466614.8167950 -> WTF?
/1298466632.2790610
/1298466637.3389000
/1298466630.5649950 -> WTF?
/1298466647.5034400
Funktioniert microtime() nicht so wie ich will oder hab ich da was falsch gemacht?
lg
misc
EDIT: Erleuchtung - kann es sein, dass die PHP-Requests auf verschiedenen Servern geparst werden, die nicht die genau gleiche Systemzeit haben?
Beitrag zuletzt geändert: 23.2.2011 14:28:02 von misc -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
ehm.... ich wieß nicht ganz genau was du uns jetzt mit dieser liste sagen willst, aber soweit ich das sehe sind alle TimeStamps unterschiedlich. Kein TimeStamp kommt 2 mal vor.
-
misc schrieb:
EDIT: Erleuchtung - kann es sein, dass die PHP-Requests auf verschiedenen Servern geparst werden, die nicht die genau gleiche Systemzeit haben?
Ja, das kann vorkommen, dass die Systemzeit nicht immer 100% übereinstimmt. -
Klar kommt kein Timestamp zweimal vor, aber schau die liste noch mal an. Wie kann ein Timestamp, der _nachher_ aufgerufen wurde, einen _früheren_ sekundenwert zeigen? Das macht keinen Sinn...
Naja, jetzt muss ich die ganze Logik meines Chats umbauen, da ich auf microtime() gesetzt habe x.x -
Bist du dir sicher?
Einfaches PHP-Script, das die Microtime zurück gibt:
http://sneppa.lima-city.de/microtime.php
Da gibt es diese Sprünge nicht!
Hast du diese in eine Datenbank gespeichert?
Vielleicht hat dann dort das Insert ein wenig gedauert?
Beitrag zuletzt geändert: 23.2.2011 15:55:43 von sneppa -
Ich habe grad vorhin die Zeit wieder synchronisiert, aber wir können halt nicht garantieren, dass das immer gleich ist.
-
djfun schrieb:
Ich habe grad vorhin die Zeit wieder synchronisiert, aber wir können halt nicht garantieren, dass das immer gleich ist.
:D
Wenn nicht müsste man in der DB abfragen, welcher der letzte Timestamp war und wenn er niedriger ist einfach diesen nehmen und um eins erhöhen. -
misc schrieb:
Wie ihr vielleicht schon vorher gelesen habt bin ich am Flash-Chat basteln mit serverseitigem PHP und MySQL.
Ich hab ein weiteres Problem das bei meinem PC und Easy-PHP nicht auftritt, auf lima-city aber schon. Um Nachrichten abzurufen verwende ich microtime. Ich speichere die microtime in eine SESSION und sende alle Nachrichten, die nach dieser Zeit gesendet wurden. Es ist ganz einfach:lg
Deine Vorgehensweise ist doch Quatsch. Anstatt dass du mit Timestamps (und Sessions! - wieso auch immer) arbeitest, kannst du einfach die ID der letzten Nachricht als Parameter an das Script senden und alle Nachrichten größer dieser ID zurück geben... -
Ja, trueweb, so mache ich es jetzt auch. Das Problem mit den IDs ist dass diese ins unermessliche wachsen und wenn der Chat ein Jahr lang läuft gibts einen Overflow was den ganzen Chat zerstört. Ich wollte ein System das sich selber immer wartet und so zeitlos funktioniert.
Ausserdem: Sessions sind sehr clever für diesen Zweck. Sie müssen nicht aufwändig in Datenbank-Form gespeichert werden und halten nur gerade für eine Chat-Sitzung, bis man das Fenster wieder schliesst. Sessions sind auch serverseitig und deshalb nicht veränderbar für den Benutzer. So können auch nicht zu viele Daten angefordert werden, oder alte Daten.
Beitrag zuletzt geändert: 23.2.2011 17:22:10 von misc -
misc schrieb:
Ja, trueweb, so mache ich es jetzt auch. Das Problem mit den IDs ist dass diese ins unermessliche wachsen und wenn der Chat ein Jahr lang läuft gibts einen Overflow was den ganzen Chat zerstört. Ich wollte ein System das sich selber immer wartet und so zeitlos funktioniert.
Wie wäre es mit einem einfachen Leeren, du willst ja nicht den gesamten Chatverlauf für Jahre speichern,
mal ganz davon abgesehen, dass ich bezweifle, dass du einen int bzw. bigint voll bekommst :D
Bigint kann Zahlen von -2^63 (-9,223,372,036,854,775,808) bis 2^63-1 (9,223,372,036,854,775,807). -
Naja, da hast du auch wieder recht :D
So lange wird der chat wohl nicht laufen. Und selbst wenn. Wahrscheinlich passiert der Timestamp-Overflow 2038 zuerst :D -
Wieso Verschlüsselst die die nachrichten in der Datenbank nicht und entschlüsselst es beim ausgeben.
Ich habs damals so gemacht: ID__Nachricht [ __ als trennzeichen ]
Das Trennen des Strings kannst du per str_pos und str_split erledigen ;).
Als Verschlüsselung kann man base64 benutzt, ist zwar nicht wirklich sicher, man kann es aber später wieder ausgeben und das sogar lesbar :D.
Das war mal so mal meine Idee. -
Wieso sollte ich belanglose Chat-Nachrichten auf einem Passwortgeschützten MySQL-Server verschlüsseln? Das verlangsamt den Chat nur und braucht mehr Rechenleistung. Und wenn jemand in die lima-city MySQL-Datenbank einbrechen kann, dann ist auch base64 kein Hindernis mehr.
Am besten mach ich doch n MD5 Hash aus den Chats, damit auch bestimmt gar niemand darauf zugreifen kann :D -
naja, SHA1512 bzw. AES ist sichere ;).
http://de.wikipedia.org/wiki/Advanced_Encryption_Standard
Das war nur so ne idee, ist deine sache ob und wie du es machst :] -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage