Kalle_B: Woher bekomme ich die genaue Zeit?

Hi,

wenn ich Datenbestände auf zwei Rechnern, die beide Zugriff auf das Web haben,  abgleichen möchte, ist Datum und Zeit der Daten wichtig.

Das PHP- Kommando time() gibt mir ja "nur" die mehr oder weniger korrekte Zeit des einzelnen Systems. Und das lügt meistens um mehrere Minuten, vielleicht sogar Stunden, wenn es in einer anderen Zeitzone steht.

Ich hätte schon das Bedürfnis, das Feld last_modified in allen MySQL- Tabellen aller Rechner mit meinen Programmen auf eine gemeinsame Zeitbasis zu stellen.

Gibt es per PHP oder SQL eine Anfrage an das Universum, wie spät es ist? Und kann diese Antwort an das System weitergeleitet werden, sodass auch Änderungen per phpMyAdmin (ohne PHP) diese Zeit benutzen?

Lieben Gruß, Kalle

  1. hi,

    RFC 868

    Ich habs hier nur in Perl

      
    # Server Send the time as a 32 bit binary number.  
    # time in seconds since 1.1.1900  
    # 25567 Tage ist die Differenz zum 1.1.1970  
    # my $sdiff = 2208988800; #25567 * 86400;  
    sub getTime{  
     my $host = shift;  
     my $client_socket = new IO::Socket::INET (  
      PeerAddr => $host,  
      PeerPort => 37,  
      Proto => 'tcp')|| return;  
      
     my $server_time = <$client_socket>;  
     $client_socket->close();  
     my $time = bin2dec($server_time) - 2208988800;  
      
     return($time);  
    }  
    ############################################################################  
    sub bin2dec{ return unpack("N", pack("a32", shift));}  
    ############################################################################  
    
    

    my $timeserver = 'ptbtime1.ptb.de';

    Oder:
    Nimm eine DCF77 (Funkuhr) und syn. damit einen Rechner in Deinem Netz. Die Anderen holen sich die Zeit von diesem Host per Socket.

    --Hotte

  2. Gibt es per PHP oder SQL eine Anfrage an das Universum, wie spät es ist?

    NTP: http://www.ptb.de/de/wegweiser/infoszurzeit/fragen/08.html

    ~JJ

  3. Hi,

    Gibt es per PHP oder SQL eine Anfrage an das Universum, wie spät es ist? Und kann diese Antwort an das System weitergeleitet werden, sodass auch Änderungen per phpMyAdmin (ohne PHP) diese Zeit benutzen?

    Diese Frage kann dir das Universum nicht beantworten, da es an jedem Punkt des Universums unterschiedlich "spät" ist, weil die Uhren anders laufen (Stichwort spezielle Relativitätstheorie).

    Allerdings kann dir, wie erwähnt, ein NTP-Server der mit Atomuhr läuft (z.B. von der Physikalisch-Technischen Bundesanstalt weiterhelfen.
    Auf meinen Server läuft dazu über Cron jede Nacht ein ntpdate.

    Der Yeti

    1. Hi,

      Diese Frage kann dir das Universum nicht beantworten, da es an jedem Punkt des Universums unterschiedlich "spät" ist, weil die Uhren anders laufen (Stichwort spezielle Relativitätstheorie).

      Hmm, interessant. Kann man denn die Uhrzeit für jeden Punkt des Universums berechnen?

      Wie alt ist eine 2 Milliarden Jahre alte Galaxie aus ihrer eigenen Sicht?

      Hängt das davon ab, in welcher "Richtung" die Galaxie liegt? Und der Urknallpunkt ist bekannt?

      Ich habe mich immer schon gewundert, wieso man das Alter von Galaxien in Erdumkreisungen (Jahren) angibt, als die Erde noch gar nicht in Planung war.

      Kalle

      1. Hi,

        Hmm, interessant. Kann man denn die Uhrzeit für jeden Punkt des Universums berechnen?

        Bestimmt. Sonst würde GPS nicht funktionieren.

        Wie alt ist eine 2 Milliarden Jahre alte Galaxie aus ihrer eigenen Sicht?

        Auch 2 Milliarden Jahre (+/- vielleicht ein paar Tage). Jedenfalls eher nicht 10 Minuten oder 50 Billionen Jahre.

        Hängt das davon ab, in welcher "Richtung" die Galaxie liegt? Und der Urknallpunkt ist bekannt?

        Da sich unser dreidimensionales Universum im vierdimensionalen Raum ausbreitet, gibt es weder einen Mittelpunkt noch einen Rand. (Stichwort gepunkteter Luftballon)

        Ich habe mich immer schon gewundert, wieso man das Alter von Galaxien in Erdumkreisungen (Jahren) angibt, als die Erde noch gar nicht in Planung war.

        Weil Otto Normalverbraucher sich unter 10^17 Sekunden nicht viel vorstellen kann.

        Der Yeti

  4. Das PHP- Kommando time() gibt mir ja "nur" die mehr oder weniger korrekte Zeit des einzelnen Systems. Und das lügt meistens um mehrere Minuten, vielleicht sogar Stunden, wenn es in einer anderen Zeitzone steht.

    Der Wert, den time() zurückgibt, ist Weltzeit (GMT, UTC). Wenn da ein Rechner um Stunden abweicht, dann geht seine Uhr schlichtweg falsch, aber mit der Zeitzone, in der er steht, hat das nix zu tun.

    Ich hätte schon das Bedürfnis, das Feld last_modified in allen MySQL- Tabellen aller Rechner mit meinen Programmen auf eine gemeinsame Zeitbasis zu stellen.
    Gibt es per PHP oder SQL eine Anfrage an das Universum, wie spät es ist?

    Falls du im Besitz dieser Rechner bist, installiere auf jedem den NTP-Server. Er ist Standard im Netz und prinzipbedingt auch besser als jede Nacht per cron die Uhr stellen zu lassen.

    Als Zeitserver nimm bitte in jedem Fall pool.ntp.org (bzw. mit jeweiliger Länderdomain davor, für Deutschland also de.pool.ntp.org), um die Last zu verteilen.

    Und kann diese Antwort an das System weitergeleitet werden, sodass auch Änderungen per phpMyAdmin (ohne PHP) diese Zeit benutzen?

    Per PHP kannst du nur das Programm date ausführen lassen, um die Systemzeit setzen zu lassen -  von hinten durch die Brust ins Auge, wenig elegant, verhältnismäßig ungenau. Vor allen Dingen stellt sich die Frage, ob der Systembetreiber es in Ordnung findet, wenn du an den Systemparametern rumdrehst, auch wenn du es nur gut meinst. Bitte ihn dann doch lieber, für eine ordentlich tickende Uhr zu sorgen.
    Bist du hingegen selbst Systembetreiber, kannst du es gleich richtig machen, siehe oben.

    1. echo $begrüßung;

      Der Wert, den time() zurückgibt, ist Weltzeit (GMT, UTC).

      Nein, das ist Lokalzeit. Mit der Weltzeit rechnen nur die mit gm beginnenden Date-and-Time-Funktionen. Ein gmtime() gibt es aber nicht.

      echo "$verabschiedung $name";

      1. Hi,

        Der Wert, den time() zurückgibt, ist Weltzeit (GMT, UTC).

        Nein, das ist Lokalzeit.

        Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).

        Wieso sollte sich deren Anzahl lokal irgendwo auf der Welt anders verhalten?

        MfG ChrisB

        --
        "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
        1. echo $begrüßung;

          Der Wert, den time() zurückgibt, ist Weltzeit (GMT, UTC).
          Nein, das ist Lokalzeit.
          Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).
          Wieso sollte sich deren Anzahl lokal irgendwo auf der Welt anders verhalten?

          Ähm ja, da lag ich wohl falsch. Da hat mir mal wieder eine der Inkonsistenzen einen Streich gespielt. Alle GMT-Funktionen heißen gm* nur time() nicht. Und ich hab mich noch gewundert, warum es kein gmtime() gibt.

          echo "$verabschiedung $name";