MySQL使用時のtimezoneの設定

この前PHPのtimezoneの設定について記述した。この設定は当然PHPスクリプトのみで有効だ。MySQLと連携したシステムを作って、SQL文に日付関連の関数を組み込んだ場合、PHPに処理が渡る前にデータベース操作が終わってしまう。となると、データベース操作で得られる値は、期待したtimezoneでの値とは異なるものになる可能性が高い。そんな時に使うのがこれ。

SET time_zone = ‘+9:00′;

MySQL使用時に「SET NAMES binary;」というおまじないを付ける人も多いと思う。文字化け関連に対応するためにつけるわけだが、やっていることはこれと同じ。「SET」によって環境を設定している。つまりこれにより、一時的にtimezoneに変更を加えることができる。だからPHPからSQL文を発行するときに、毎回このSQL文を一番最初に発行しておいてやれば良さそうだ。

どんな具合に適用されるのかは、しばらく使ってみて確かめることにする。

海外レンタルサーバ3iXを再契約

2010/05/12 | 海外サーバ

アメリカの格安レンタルサーバ3iX。40GB1ドルという超低価格なコースから契約できるレンタルサーバだ。数年前にレンタルしていたけど、用途がなくなってしまったのでそのまま解約したけど、今回再契約した。

海外レンタルサーバ3iX

昔の記事でいろいろ3iXの事を書いたが、ちょっと事情が変わったようだ。コントロールパネルであるcPanelの設定項目が減ったような気がする。当時クレーマーのようにいろいろリクエストをしたからかも。チャットサポートも以前ほどフレンドリーではなくなったような気がする。しかし気にしない。現状特殊なことをするつもりもなく普通にウェブサイトを立ち上げるだけだし。

海外のレンタルサーバだけあって転送速度だけは気にしておかなくてはいけない。セキュリティ面ももちろんだけどそれは日本も同じ(某レンタルサーバでひどい目に会ったから)。転送速度は幾分遅い。これは体感的にわかる。個人的には耐えられないような速度ではないけれど、「おっとり」している、という感じだろうか。HTMLの表示では感じないが、画像がもたついている。FTPも同様で、ややもたつく感じがする。「とにかくサクサク動かないと・・・」という人には勧めにくい。

あと時間帯によって速度に差が出る(これも日本と同じか)。遅くなる時間帯は、今まで使ってみたところでは日本時間の深夜1時頃とかと朝9時頃とか。現地時間だと夕方6時とかと深夜2時くらいになるのだろうか。仕事が終わった後と夜中という時間帯だから、日本と同じような状況なのだろう。

というわけでミッションクリティカルなサイトを運営したい場合はやや危険な感があるが、そうではないサイトなら低価格大容量というサービスは魅力的だ。日本のレンタルサーバでも十分低価格大容量になってきたから、日本のサーバでも十分といえば十分。ただし決定的な違いは「アダルト可」かどうかだ。日本のレンタルサーバなら軒並み不可だ。アダルト可のレンタルサーバになると、価格が上がる(ましてや1ドルで借りられるサーバはない)。日本でも安価なアダルトOKサーバはあるが、そこでひどい目に会ったので、今のところ敬遠している。

PHPの話題とすればphpinfo()の情報となるが、項目はてんこ盛り状態だった(別のサーバなら違う結果になるかもしれないけど)。まぁデータベースが使えて、マルチバイトがOK、curlがOK、simpleXML等XML系が使えれば、後はまぁなんとかなってしまう。ちなみにallow_url_fopenはだめだった。disable_functionsで制御される関数が設定してある(dl, system,  passthru,  popen,  pclose,  proc_open,  proc_nice,  proc_terminate,  proc_get_status,  proc_close,  pfsockopen,  leak,  apache_child_terminate,  posix_kill,  posix_mkfifo,  posix_setpgid,  posix_setsid,  posix_setuid)。system関数は使えないけど、execは大丈夫そう。ただ重い処理を走らせると、すぐに止められるのでこれは意味が無いかもしれない。

まぁ、徐々に様子を見ていくことにする。

海外レンタルサーバ3iX

timezoneを設定する

故あって久々に海外サーバを使うことになった。海外サーバは安価で大容量という点がいいのだが、さしあたって2点問題がある。

まず一つ目は速度が期待できないこと。こればかりはどうしようもない。サーバ側でのプログラムの処理速度は問題ないが、距離が遠い分表示に時間がかかる。試してみたら、HTMLのみなら容量もそれほど大きいわけではないのでそれほどでもないが、画像等のバイナリを扱うと遅さがわかってしまう。しかし、こればかりはどうしようもない。画像そのもののサイズを小さくするしかない。

もう一つ。時刻の設定が問題。海外設置のサーバでは、専用サーバやVPSでもない限り現地時刻で設定してあるので、単純に現在日時を表示しようとすると、現地時間で表示されてしまう。かといって時差を考慮して足し算引き算をするのはもっとダメ。サマータイムとか考慮することを考えるととても複雑だし、汎用化するために関数化するのはプログラムの本質から離れてしまうような気がするのでNG。

でも実は簡単だった。プログラム自体は何も考慮せず作り、プログラムの先頭におまじないをつければよい。

putenv(‘TZ=JST-9′);

この1行を書いておくだけで、プログラムは日本時間で処理してくれる。環境変数のことを考慮するようなことってあまりないが、Tipsとして知っておくと便利な機能だ。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net