先日、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 ;
}
}
