過去ログ NO.1019778084
■ 不特定多数 [2002年04月26日08時40分]CGIスクリプトを海外サーバーに設置したところ、 表示される時刻が現地時刻になってしまいました。 この時差を調整する方法はありますか?
□ すえぽん [2002年04月26日08時41分]Perl で時刻を取得する方法にはいくつかの方法がありますが、 色々と解説していると解説ページになってしまい、 CGI Script Market の趣旨にはずれるモノとなってしまうので、 当サイトで配布しているスクリプトに対して一番有効というか、 比較的いじりやすい方法のみを紹介します。
当サイトで配布しているCGIスクリプトは、ほとんど以下の取得方法を用いています。
($sec,$min,$hour,$day,$mon,$year,...) = localtime(time);
これは、サーバーの設置してある場所での現地時刻を取得するモノです。 スクリプト中のこの文字列を探して、以下のように修正します。
($sec,$min,$hour,$day,$mon,$year,...) = gmtime(time +9*60*60);
gmtime() は世界標準時の取得が出来るので、どの国のサーバーに設置していても 同じ時刻が取得できます(できるはずです…そう思いたいものです) なので、コレを元に日本標準時である世界標準時+9時間に修正するのがこの方法です。 (60*60 → 60秒X60 = 1時間...X9 = 9時間という意味です) 最初からこの方法にしない訳は、ここでは省略します。
さて、当サイトで配布しているスクリプトの中には、 時刻の取得を複数回行っているモノがあります。 主にアクセス解析系のスクリプトですが、 この場合、数カ所全てを修正しなければ完全に修正する事が出来ません。 ですが、複数の時刻を取得しているということは、 それぞれ別の時刻を取得しているというコトで、 上記した方法では応用が利かない部分があります。
($sec,$min,$hour,$day,$mon,$year) = localtime(time - 24*60*60); ($sec,$min,$hour,$day,$mon,$year) = localtime(time - 48*60*60);
記述された数字を見るとなんとなく想像がつくと思うのですが、 -24 は24時間前、-48 は48時間前を意味します。 従って、このような部分の修正は下記のようにします。
($sec,$min,$hour,$day,$mon,$year) = gmtime(time +(9-24)*60*60); ($sec,$min,$hour,$day,$mon,$year) = gmtime(time +(9-48)*60*60);
記述の仕方は色々ありますがとりあえずコレが理解しやすく修正しやすいと思います。
|
|