ラベル PHP の投稿を表示しています。 すべての投稿を表示
ラベル PHP の投稿を表示しています。 すべての投稿を表示

2013年8月31日土曜日

FuelPHPでSessionがCookieに保存できなかった話

FuelPHPをようやく使いこなせてきたところでSessionのset_flashとかを使ってValidationエラーの表示をやろうと思ったらCookieに保存すらされていない現象が起きました。

結果からいうとFuelPHPはなにも悪くなく、リバースプロキシのサーバ時刻がGMTになってたのが原因でした。

同じサーバでバーチャールホストでFuelPHPを複数動かしていたのですが、一方ではSessionが使え、一方ではSessionが使えない不思議な現象で特定まで時間がかかりました。

 

FuelPHPのSessionは賢く、有効期限やらなんやら全部やってくれます。

なぜ同じサーバなのにSessionが動いたり(動いているように見えたり)、動かなかったりしたのかというと、

Sessionが動いてる方ではユーザ認証を使っていたためSessionの有効期限を大幅に伸ばしており、GMT-JSTの時刻差を超えて運用していたのでSession使えていました。

もう一方ではFuelPHP標準のSession有効期限を使っていたため、GMT-JSTの時刻差によって常にSession切れになっていたのです。

 

さらに問題だったのがFuelPHPを動かしているサーバ自体はJSTに設定してあり問題なかったのですが、リバースプロキシとしてVarnishサーバをかませており、そのVarnishサーバの時間がGMTだったことです。

ChromeでCookieを見ていた時、たまたまHTTP Headerを見て気がついたからよかったものの、随分初歩的なミスを犯してしまいました。

普段サーバを立てる時はntpdを一番最初に入れているのにVarnishサーバだけ入ってなかった…

 

2013年1月7日月曜日

PHPで真っ白画面

 

また下らないことで少しハマった。

Webサーバの引越時にPHPファイルを移行してMySQLに接続するコードーがありました。

ほぼ同じ構成のサーバの引越しなので特に問題なく進むはずと思ってたのですが、php.iniの設定でエラー表示するようにしてるのに画面が真っ白です。

エラーログファイルにも何も書かれていません。

 

一時間くらいうろうろしてたところふとMySQLへ接続するDAOラッパをコピペで動かしてるのを思い出しました。

見てみると「@」アットマーク。エラー制御演算子がmysql_connectについてました。

エラーが出ないのも納得。エラー制御演算子をつけているのにも納得。

こういうことがあるからコピペする時は最大限の注意を。