【问题标题】:Get TIme from TimeServer从时间服务器获取时间
【发布时间】:2011-10-21 00:11:29
【问题描述】:

我正在尝试从 NIST 时间服务器获取时间。我怎样才能做到这一点。我可以使用任何语言,但我更喜欢 php

【问题讨论】:

    标签: php time


    【解决方案1】:
    <?php
    /* Query a time server
       (C) 1999-09-29, Ralf D. Kloth (QRQ.software) <ralf at qrq.de> */
    $timeserver = "ntp1.sf-bay.org";
    $timercvd = query_time_server($timeserver,37);
    if (!$timercvd[1]) { # if no error from query_time_server
      $timevalue = bin2hex ($timercvd[0]);
      $timevalue = abs (HexDec('7fffffff') - HexDec($timevalue) - HexDec('7fffffff')) ;
      $tmestamp = $timevalue - 2208988800; # convert to UNIX epoch time stamp
      $datum = date("Y-m-d (D) H:i:s",$tmestamp - date("Z",$tmestamp)); /* incl time zone offset */
      $doy = (date("z",$tmestamp)+1);
    
      echo "Time check from time server ",$timeserver," : [<font color=\"red\">",$timevalue,"</font>]";
      echo " (seconds since 1900-01-01 00:00.00).<br>\n";
      echo "The current date and universal time is ",$datum," UTC. ";
      echo "It is day ",$doy," of this year.<br>\n";
      echo "The unix epoch time stamp is $tmestamp.<br>\n";
    } #if (!$timercvd)
    else {
      echo "Unfortunately, the time server $timeserver could not be reached at this time. ";
      echo "$timercvd[1] $timercvd[2].<br>\n";
    } # else
    ?>
    

    source

    【讨论】:

    • 我收到错误Fatal error: Call to undefined function query_time_server() in /home/sad/public_html/time/index.php on line 5
    • @SamBaumgarten:在我的链接源中找到函数 query_time_server
    【解决方案2】:

    真实代码的完整答案(按出生和kloth混合和匹配代码):

    function query_time_server ($ntpserver, $socket) {
    /* Query a time server
       (C) 1999-09-29, Ralf D. Kloth (QRQ.software) <ralf at qrq.de> */
    
        // parameters: server, socket, error code, error text, timeout
        $fp = fsockopen($ntpserver,$socket,$err,$errstr,3);
    
        if ($fp) {
            fputs($fp,"\n");
            $timevalue = fread($fp,49);
            fclose($fp); 
        } else {
            $timevalue = " ";
        }
    
        $ret = array();
        $ret[] = $timevalue;
        $ret[] = $err;     # error code
        $ret[] = $errstr;  # error text
        return($ret);
    }
     $got_time = false;
    $servers = array(
    
        'ntp.pads.ufrj.br',
        'ntp2.pads.ufrj.br',
        'ntp3.pads.ufrj.br',
        'time.nist.gov',
        'ntp.on.br',
        'ntp2.on.br'
    );
    
    
    try { 
        foreach ( $servers as $ntpserver ) {
            echo "</br>".$ntpserver."</br>";
    
                $fp = @fsockopen( $ntpserver, 37, $errno, $errstr, 2 );
            if ( !$fp ) {
                // offline or connection refused, try next
                echo $ntpserver." is offline or connection refused, try next.</br>";
                //continue;
            } else {
    
                $data = '';
                while ( !feof( $fp ) ) {
                    $data .= fgets( $fp, 4 );
                }
                fclose( $fp );
    
                if ( strlen( $data ) == 4 ) {
                    $got_time = true;
                    $time1900 = hexdec( bin2hex( $data ) );
                    $timestamp = $time1900 - 2208988800;   // Time server is based on 1900 while Unix is based on 1970
    
                    //break;
                } else {
                    $timestamp = "NO RESULT";
                }
                echo $ntpserver." port 37 is ONLINE connection accepted, with result: ".$timestamp."</br>";
    
            }
    
    
    
            //$ntpserver = "ntp.pads.ufrj.br";
    
            $timercvd = query_time_server($ntpserver,13);
            //if ($timercvd[1] > "") { echo "urubu patata";}
    
            if (!$timercvd[1]) { // if no error from query_time_server
                $timevalue = $timercvd[0];
                echo "Time check from time server ".$ntpserver." on port 13 : <font color='red'>".$timevalue."</font></br>";
                //echo "Time check from time server ".$ntpserver." : [<font color=\"red\">".$timevalue."</font>].<br>\n";
            }  else {
                echo "Unfortunately, the time server $ntpserver could not be reached at this time on port 13. </br>";
                echo "$timercvd[1] $timercvd[2].<br>\n";
            } //*/
        }
    } catch (Exception $e) {
        echo "Exceção pega2: ",  $e->getMessage(), "\n";
    } ?>
    

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 2011-10-28
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多