いま、PHPのローカル開発環境として使用している、Wockerの時刻設定をしたいと考えています。というのはドットインストールのレッスンで、PHPでTwitterログインを実装しよう (全23回)(動画はプレミアム会員のみ閲覧可)を見ながら、TwitterのOAuth認証によるログイン画面を実装すると、時刻のズレを指摘されるからです。
Twitterからの指摘
http://wocker.dev/dotinstall/tw_connect_php_2/ という画面を作成して、”Sign in with Twitter”をクリックすると、
http://wocker.dev/dotinstall/tw_connect_php_2/login.phpに遷移しますが、エラーが返ってきます。
{"errors":[{"code":135,"message":"Timestamp out of bounds."}]}
Twitterの開発者コミュニティーの書き込みを確認すると、Twitterのサーバーはデータ取得の要求をされた時に、要求側の時刻が実際の時刻とズレているときに返されるとのことです。
Wockerの時刻設定はどこから行うのか?
おそらく、ローカル開発環境として使用しているWockerの時刻設定を変更しなければならないのでしょう。時刻設定として思いつく設定ファイルは、以下の3つです。
1./etc/php.ini
wocker ~ $ wocker start php-study(PHPアプリを開発しているコンテナ) wocker ~ $ wocker exec -it php-study bash # cd / # vi etc
Wocker内部に入り込んで、ルートからetcディレクトリに入り込んでも、そもそもphp.iniがありません。
2./etc/localtime
# vi /etc/localtime
次にCentOSのタイムゾーンを設定しているファイルを確認しました。ところが、文字化けしているのでしょうか?下手に手出しできない雰囲気が漂っています。
3./usr/share/zoneinfo/Japan
# vi /usr/share/zoneinfo/Japan
日本のタイムゾーンを設定しているファイルをのぞいてみました。これまたうかつに手を出せません。WockerをPHPのローカル開発環境として使っている場合、どこから時刻の設定を行えばよいのでしょうかね?
追記(2016/06/20)
後日この問題は解決しました。以下のコマンドでvagrantをリロードすると、再度、時刻が設定されます。その設定され直した時刻になると、Twitterとの接続が可能になります。
wocker ~ $ wocker stop wocker ~ $ exit $ vagrant halt $ vagrant reload
ちなみに時刻のズレを確認するためには、3つの時刻を確認する必要があります。
ローカルマシンの時刻 WockerVMの時刻 Wockerコンテナの時刻
それぞれコマンドで表すとこうなります。
$ date wocker ~ $ date wocker ~ $ docker exec php-study(使用しているコンテナ名) date
関係者のみなさまありがとうございました!
〔参考サイト〕