先日、javascript 側の時間の取得方法を書きました。

続いて、html と php と サーバ側の設定になります。

また、Raspberry Pi3 で インターネット回線が使用出来ない場合で

ブラウザを使用して時間を同期する方法になります。

htmlの設定

<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<head>
<title></title>
<script type="text/javascript" src="http://192.168.0.1/day.js"></script>

<body>
<form name ="input_form" action="send.php" method="post" onsubmit="getDateandtime()">
<p>
<input type="submit" value="日時処理" />
<input type="hidden" name="hidden_year" value="" />
<input type="hidden" name="hidden_month" value="" />
<input type="hidden" name="hidden_day" value="" />
<input type="hidden" name="hidden_hour" value="" />
<input type="hidden" name="hidden_min" value="" />
<input type="hidden" name="hidden_sec" value="" />
</p>
</form>
</body>
</html>

phpの設定

send.php として作成します。

詳細な時間を設定する場合は補足を確認してください。

<?php

/*
//デバック用
ob_start();
var_dump($recvData);
$date =ob_get_contents();
ob_end_clean();
$fp = fopen("/var/www/html/dump.txt", "a+" );
fputs($fp, $date);
fclose( $fp );
*/

$chk = 0 ;

//ブラウザの日時取得(数字に変換)
$jsyear = intval($_POST['hidden_year']);
$jsmonth = intval($_POST['hidden_month']);
$jsday = intval($_POST['hidden_day']);
$jshour = intval($_POST['hidden_hour']);
$jsmin = intval($_POST['hidden_min']);
$jssec = intval($_POST['hidden_sec']);

//サーバーの日時取得(数字に変換)
$year= intval((date('Y')));
$month= intval((date('n')));
$day= intval((date('j')));
$hour= intval((date('G')));
$min= intval((date('i')));
$sec= intval((date('i')));

//年
if ($jsyear != $year) {
$chk = 1 ;
}

//月
if ($jsmonth != $month) {
$chk = 1 ;
}

//日
if ($jsday != $day) {
$chk = 1 ;
}

//時
if ($jshour != $hour) {
$chk = 1 ;
}

//分
if ($jsmin != $min) {
$chk = 1 ;
}

if($chk == 1) {

//秒(サーバ)の差分確認(何秒後に更新するのか確認)
$ssec = 60 - $sec ;

//秒(ブラウザ + サーバ)の値
$bsec = $jssec + $ssec ;

//サーバが更新時に設定する秒の値
$wsec = $bsec - 60 ;

if ($wsec > 0) {
//59分の場合に時間を繰り越す処理
if ($jsmin == 59) {
$jsmin = '00' ;
if ($jshour == 23) {
$jshour = '00' ;
$jsday = $jsday + 1 ;
} else {
$jshour = $jshour + 1 ;
}
} else {
$jsmin = $jsmin + 1;
}
} else {
if ($jsmin == 59) {
$wsec = $bsec ;
} else {
$wsec = $bsec ;
}
}

//shell作成
$update = ('date -s'.' '.'"'.$jsmonth.'/'.$jsday.' '.$jshour.':'.$jsmin.':'.$wsec.' '.$jsyear.'"');

//ファイル確認
$path = "/var/www/html/date.txt";
if( !file_exists( $path ) ) {
touch ( $path );
}

//shellファイル作成
$fp = fopen( $path , 'w');
fputs($fp, "#!/bin/sh\n");
fputs($fp, $update );
fclose($fp);
}

?>

サーバの設定

Linux の crontab を使用して、1分間隔で時間を同期する設定です。

*/1 * * * * root bash /var/www/html/date.txt && rm -f /var/www/html/date.txt

補足

phpの設定 の以下の部分が時間を詳細に設定する内容になります。

筆者が実行した時は1分ぐらいの誤差でしたので良しとしました

if ($wsec > 0) {
//59分の場合に時間を繰り越す処理
if ($jsmin == 59) {
$jsmin = '00' ;
if ($jshour == 23) {
$jshour = '00' ;
$jsday = $jsday + 1 ;
} else {
$jshour = $jshour + 1 ;
}
} else {
$jsmin = $jsmin + 1;
}
} else {
if ($jsmin == 59) {
$wsec = $bsec ;
} else {
$wsec = $bsec ;
}
}