Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?

More than 3 years have passed since last update.

@imaiworks

ntpdを使わずにPHPで日付日時を合わせる

むか~し、某システムでfwの関係上、内側から外向きのNTPポートも閉じられてたときに作ったものです。
厳密な時刻が必要なシステムの場合は無理ですが、数msのズレでもいいなら使えなくはないと思います。

端的に言えば情報通信研究機構が提供している公開NTPのjsonを
file_get_contentsで取得して、
時刻部分を力技で切り出してdateコマンドに流し込んでいるという・・
恐ろしや・・

/bin/echo '<?php date_default_timezone_set("Asia/Tokyo");
$r=file_get_contents("http://ntp-a1.nict.go.jp/cgi-bin/jsont?".time());
$startpos=strpos($r,"st");$startpos=strpos($r," ",$startpos)+1;$endpos=strpos($r,",",$startpos);
$mt=substr($r,$startpos,$endpos-$startpos);
$cmd="/bin/date -s \"".date("m/d H:i:s Y",$mt)." JST\"";
if(date("Y",$mt)>=2012){exec($cmd);}else{echo "set error\n";}
echo "dateset ".$cmd."\n";?>' | /usr/bin/php

見た目上、改行入れてますが、全ての改行を外せばワンライナーでいけますので
ntpd設定するのメンドクセってときにはcrontabに仕込んでおけばよいかとw

(※ json_decode使わなかったのは、その時のサーバに何故か入っていなかったからw)
(※ ソース内には2012なんて文字があるのでたぶんその頃に作ったんだろなーー)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What is going on with this article?