なぜか cakephp上では変な時間(UTC)になってしまう時の対策。
core.phpのtimezoneの設定を確認。
[cc lang=’php’ line_numbers=’false’]
/**
* Uncomment this line and correct your server timezone to fix
* any date & time related errors.
*/
//date_default_timezone_set(‘UTC’);
[/cc]
timezoneの設定はコメントアウトされてる。
コメントにちゃんと書いて有りますな。
ここのコメント外してあんたのサーバーに合わせた設定にしなさいよと。
言われたとおりに
[cc lang=’php’ line_numbers=’false’]
date_default_timezone_set(‘Asia/Tokyo’);
[/cc]
Asia/Tokyo に変えて解決。
…と普通ならここで解決するはずが、うちでは全く解決しない。
普段は大丈夫やのにController内で自作Componentを使おうとするとなぜかtimezoneがUTCになってしまう。
とにかく原因究明のために色んなとこでtimezoneがどうなってるのかを調査してみることに。
[cc lang=’php’ line_numbers=’false’]
class FooController extends AppController {
public $components = array(
‘Foo’,
);
/**
* beforeFilter
*
* @var mixed
*/
public function beforeFilter() {
var_dump(date(‘e’));
}
/**
* index method
*
* @return void
*/
public function index() {
var_dump(date(‘e’));
}
}
[/cc]
どの段階で変わってるのか見るために beforeFilter と index で timezoneをdumpしてみる。
結果 beforeFilter は Asia/Tokyo
index は UTC になってた。
んで public $components を削除してみると今度はちゃんと両方 Asia/Tokyo に。
これで Component が悪さしてるのは間違いない。
でも timezone の変更なんかしてへんぞーと更に調査を進めると…見つかりました。
PHP で Twitter API や OAuth 認証を行うためのライブラリ 「tmhOAuth」のコンストラクタ内で
[cc lang=’php’ line_numbers=’false’]
// default configuration options
$this->config = array_merge(
array(
//略
// default timezone for requests
‘timezone’ => ‘UTC’,
//略
),
$config
);
date_default_timezone_set($this->config[‘timezone’]);
[/cc]
こんなのが!
思いっきりUTCにセットしちゃってるYO!
configはnewする時に上書き出来るので
[cc lang=’php’ line_numbers=’false’]
$tmhOAuth = new tmhOAuth(
‘consumer_key’ => ‘******************’,
‘consumer_secret’ => ‘*********************’,
‘timezone’ => ‘Asia/Tokyo’,
);
[/cc]
こんな感じにセットしてやって解決。
cakephpのソースまで追っかけてた努力は何だったんだ(ノД`)