Zend_DateとZend_Localeの罠

罠というほどではないのかもしれないが、今回は罠ってことにさせてもらう。

このために、3時間くらいの時間を使ってしまったから。


Zend_Dateクラスを引数なしで生成した場合、つまり

$date = new Zend_Date();

って記述した場合。


この場合は、内部でZend_Localeが呼び出され、

ブラウザ->サーバ設定->フレームワーク設定の順で、Locale設定を検索する。

Locale設定とは、日付に関する表現方法が各地で違うため、どの地域表現方法で、

表示するかを決める設定。日本語だと、1月、2月だけど、英語では、Jan、Febみたいな。

そして、現在時刻を設定したZend_Dateクラスが作成される。


今回罠に落ちたのはバッチ処理用のphpプログラムにZend_Dateコンポーネントを

利用して作成しようとして起こったのです。

バッチってことは、主にcronで呼び出され、ブラウザ経由では起動されません。

サーバ設定からLocale設定が取得できればいいのですが、試した結果、

サーバによっては、設定されていなくて、取得できない場合があるようです。

hetemlは、phpがcgi版のためか取得できてませんでした。

(ブラウザでphpのsetlocale関数の戻り値をdumpして確認しました)

フレームワーク設定は、デフォルト状態では、何も設定されていません。


Zendのソースをおったり、ネットで調べたりしてたどり着いた解決策は2つ。

コメント 停止中

%d人のブロガーが「いいね」をつけました。