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