c/fe

http://d.hatena.ne.jp/uzulla から移行しました。

ECCubeのセッション周りがおかしかった

オチから言えば、PHP5.2.10が悪かったので、バージョンをあげるなりしましょう。

症状

・モバイルページが表示できない
ECCubeはDBにセッション情報を一時保存するのだが、そのセッションをつかみそこね(生成しそこね)、延々とリダイレクトが発生してしまう。
(ちなみに、タチが悪い事に、Apache再起動直後などは成功したりする…)

Firefoxだと

ページの自動転送設定が正しくありません
このアドレスへのリクエストに対するサーバの自動転送設定がループしています。

とか言われる。

この症状はphpのsession周りの設定が原因の事も多いが、今回はいくらその辺りをいじっても直らなかったので、ログを追い始めた。


・ログに変なエラーが有る

PHP Fatal error: Class 'SC_DB_DBFactory_MYSQL_Ex' not found in /root/data/class_extends/db_extends/SC_DB_DBFactory_Ex.php on line 51

ぱっと見てこのクラスが参照できていないようだが、いくら頑張って確認しても、実際には正しく参照できる記述になっている。

というか、ECCubeのトップページが表示できているのでDBにアクセスができていない訳がないし、実際このクラスは何回もよびだされていて、その内何回かでだけ、クラスの生成に失敗している。

原因

どうやらphp5.2.10で、一部状況下においてうまくクラスを宣言できないという不具合があるらしい。*1
切り分けが結構やっかいだが、ECCubeの場合は一部のnew時にのみエラーが起こるのであり、挙動不審なら疑って良いと思う。


他の部分はうごいているので、スタックか、もしくはなにか解析部がおかしいんだろうなー。

解決策

EC-cubeのコードを全部書き換えるなど、バカバカしいことこの上ないので、PHP5.3.0とかに上げましょう。
なに?上げられない?ご愁傷様ですw

オマケ

5.3.0から、PHP Deprecated: Function eregi_replace() is deprecatedといったエラーがガンガン出ます。
ググってけしましょう。
php.iniにerror_reporting = 127とか書いても消えるとおもうよ。

まとめ

これだからPHPは!!ぬ*2

*1:http://bugs.php.net/bug.php?id=48686

*2:まあ、色々楽なPHPは好きですけどね