Php 从时间服务器获取时间

Php 从时间服务器获取时间,php,time,Php,Time,我试图从NIST时间服务器获取时间。我怎样才能做到这一点。我可以使用任何语言,但我更喜欢php <?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

我试图从NIST时间服务器获取时间。我怎样才能做到这一点。我可以使用任何语言,但我更喜欢php
<?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
?>

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

函数查询\u时间\u服务器($ntpserver,$socket){
/*查询时间服务器
(C) 1999-09-29,拉尔夫·D·克洛特(QRQ.软件)*/
//参数:服务器、套接字、错误代码、错误文本、超时
$fp=fsockopen($ntpserver,$socket,$err,$errstr,3);
如果($fp){
FPUT($fp,“\n”);
$timevalue=fread($fp,49);
fclose($fp);
}否则{
$timevalue=“”;
}
$ret=array();
$ret[]=$timevalue;
$ret[]=$err;#错误代码
$ret[]=$errstr;#错误文本
回报($ret);
}
$got\u 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'
);
试试{
foreach($ntpserver形式的服务器){
echo“
”$ntpserver。”
”; $fp=@fsockopen($ntpserver,37,$errno,$errstr,2); 如果(!$fp){ //脱机或连接被拒绝,请尝试下一步 echo$ntpserver。“脱机或连接被拒绝,请尝试下一步。
”; //继续; }否则{ $data=''; 而(!feof($fp)){ $data.=fgets($fp,4); } fclose($fp); 如果(strlen($data)==4){ $got_time=true; $time1900=hexdec(bin2hex($data)); $timestamp=$time1900-2208988800;//时间服务器基于1900,而Unix基于1970 //中断; }否则{ $timestamp=“无结果”; } echo$ntpserver。“端口37已接受联机连接,结果为:“.$timestamp”。
”; } //$ntpserver=“ntp.pads.ufrj.br”; $timercvd=查询时间服务器($ntpserver,13); //如果($timercvd[1]>“”){echo“urubu patata”;} if(!$timercvd[1]){//if查询时间服务器没有错误 $timevalue=$timercvd[0]; 在端口13上回显“来自时间服务器的时间检查”。$ntpserver.:“.timevalue.”
”; //回显“来自时间服务器的时间检查”。$ntpserver.:[“$timevalue.”].
\n; }否则{ echo“很遗憾,此时无法在端口13上访问时间服务器$ntpserver。
”; 回显“$timercvd[1]$timercvd[2]。
\n”; } //*/ } }捕获(例外$e){ echo“Exceção pega2:”,$e->getMessage(),“\n”; } ?>
Im getting error
致命错误:调用第5行/home/sad/public\u html/time/index.php中未定义的函数query\u time\u server()
@SamBaumgarten:find function query\u time\u server in my linked source
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";
} ?>