諸事情で(というより勉学のために)アクセス解析を自作しようと思って、WordPressに書き足す形でコードを書いたところ、date関数で取得する時刻がずれてしまうという問題にぶつかり、挫けました。
…というわけで、同じようなことをする人もいるかなぁと思うので、同じ轍を踏まないようにご注意下さい(^_^;)
やろうとしたこと
やろうとしたことは非常に単純で、header.phpの最初でrequire_onceを利用して、解析用のコードを読み込んだだけです。
<?php require_once("sample.php"); ?>
読み込み先のsample.phpでは、$_SERVER系の変数を読んでテキストに書くだけです。
このときに利用しているdate関数で取得した時刻がどうもおかしなことになります。
<?php // こんなかんじで取得 $data["ua"] = $_SERVER['HTTP_USER_AGENT']; $data["ip"] = $_SERVER["REMOTE_ADDR"]; // このあと問題となる部分 $data["datetime"] = date('Y-m-d\TH:i:s',$_SERVER['REQUEST_TIME']); (中略) // ファイル書き出し file_put_contents("log.txt", $data["datetime"].",".$data["ip"]); ?>
時刻がずれる問題発生!!
上記のコードで動いたんですが、どうもおかしくて、9時間ずれるんですよ。でも、sample.phpだけ動かすと特に問題なく時刻が取得できているという怪奇現象。
そこで、調べてみたところ、WordPress内部ではTimezoneがUTC(世界標準時)になってるらしい!!
そう言われてみれば、たしかに9時間ってのはイギリスと日本の時差でしたねっていうね。
そんなわけで、TimezoneをTokyoに戻してあげる必要がありました。
Timezoneを修正する
Timezoneを修正すると言っても、WordPressの内部をいじるのは怖いので、今回作ったsample.phpの内部でだけ、Timezoneを変更するように対応するようにしています。(というか、そもそもサーバの時刻は日本時間のはずだから、むしろワードプレスくんがTimezoneを変更してるんだよね?)
<?php // TimeZoneを日本時間に設定する(WPではTimezoneが勝手に変わってしまう) $defaultTime = date_default_timezone_get(); date_default_timezone_set('Asia/Tokyo'); // こんなかんじで取得 $data["ua"] = $_SERVER['HTTP_USER_AGENT']; $data["ip"] = $_SERVER["REMOTE_ADDR"]; // Timezone変えたのできちんととれます $data["datetime"] = date('Y-m-d\TH:i:s',$_SERVER['REQUEST_TIME']); (中略) // ファイル書き出し file_put_contents("log.txt", $data["datetime"].",".$data["ip"]); // TimeZoneを元に戻す date_default_timezone_set($defaultTime); ?>
おしまい
こうして無事に時刻を取得することができました!
余談ですが、この間違いに気付くまでの間に取得したログの時刻の修正がわりと過酷でしたw
きちんと動作を確認してからデプロイすべきだよね、本当は(´・ω・`)
べき論怖い!!