Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get the time of a remote server?

Tags:

php

time

server

I am currently working on a websever that will create a quick diagnose dashboard of other servers.

My requirement is to display the time of these remote servers, it seems that the NTP create some issues and I would like to see that.

I currently have a bat file on my desktop that simply send

net time \\SRV*******

I have also tried:

echo exec('net time \\\\SRV****');

=> result is '0'

But I would like to find a better solution in PHP so anybody of a team can read it on a webpage.

Any idea what I would do?

Note: this is not related to How to get date and time from server ad I want to get the time of a REMOTE server and not local server

like image 450
Waza_Be Avatar asked Dec 31 '25 08:12

Waza_Be


1 Answers

You can use NTP protocol to retrieve datetime from a remote server.

Try this code:

error_reporting(E_ALL ^ E_NOTICE);
ini_set("display_errors", 1);

date_default_timezone_set("Europe/...");

function query_time_server ($timeserver, $socket)
{
    $fp = fsockopen($timeserver,$socket,$err,$errstr,5);
        # parameters: server, socket, error code, error text, timeout
    if ($fp) {
        fputs($fp, "\n");
        $timevalue = fread($fp, 49);
        fclose($fp); # close the connection
    } else {
        $timevalue = " ";
    }

    $ret = array();
    $ret[] = $timevalue;
    $ret[] = $err;     # error code
    $ret[] = $errstr;  # error text
    return($ret);
}


$timeserver = "10.10.10.10"; #server IP or host
$timercvd = query_time_server($timeserver, 37);

//if no error from query_time_server
if (!$timercvd[1]) {
    $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";

    echo date("d/m/Y H:i:s", $tmestamp);
} else {
    echo "Unfortunately, the time server $timeserver could not be reached at this time. ";
    echo "$timercvd[1] $timercvd[2].<br>\n";
}
like image 150
Jan Rydrych Avatar answered Jan 01 '26 21:01

Jan Rydrych