kostenloser Webspace werbefrei: lima-city


Timestamp stimmt nicht

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    misc

    misc hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. e******n

    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.
  4. djfun

    Co-Admin Kostenloser Webspace von djfun

    djfun hat kostenlosen Webspace.

    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.
  5. Autor dieses Themas

    misc

    misc hat kostenlosen Webspace.

    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
  6. 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
  7. djfun

    Co-Admin Kostenloser Webspace von djfun

    djfun hat kostenlosen Webspace.

    Ich habe grad vorhin die Zeit wieder synchronisiert, aber wir können halt nicht garantieren, dass das immer gleich ist.
  8. 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.
  9. t*****b

    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...
  10. Autor dieses Themas

    misc

    misc hat kostenlosen Webspace.

    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
  11. 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).
  12. Autor dieses Themas

    misc

    misc hat kostenlosen Webspace.

    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
  13. privatecitypage

    Kostenloser Webspace von privatecitypage

    privatecitypage hat kostenlosen Webspace.

    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.
  14. Autor dieses Themas

    misc

    misc hat kostenlosen Webspace.

    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
  15. privatecitypage

    Kostenloser Webspace von privatecitypage

    privatecitypage hat kostenlosen Webspace.

    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 :]
  16. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!