WordPressのPHPList-Form-Integrationプラグインで、メールマガジン購読の際にメアド確認せずに一気に登録させるように設定していたのだが、テスト環境(社内サーバ)ではうまくいっていたのに、CoreServerではうまくいかなかった。
PHPList-Form-Integration内のpholist.phpを書き換えたり、デバッグモードでcURLの内容を出力したりしたら、セッションが引き継げてないのが原因だとわかった。そのセッションが引き継げてない理由自体は全然わかってなかったのだが、他の案件が忙しくなってこの件を一旦放置していた。CakePHPの案件にも一旦目処がついたので、この件の調査を再開しようと思った矢先、閃いた。もしかしたら、モード(版)が違うのではないか?と。
モード?それはすなわち、CoreServerだとPHPはモジュール版とCGI版がある。PHPListはセーフモードだと警告メッセージが出続けるのでCGI版で動かす必要がある。そのときに、CGI版で動かす設定を/lists/admin/以下の.htaccessとphp.iniに記述していた。ところが、/lists/以下には設定してなかったので、/lists/以下はモジュール版で動いていた。
PHPList-Form-Integrationの購読フォームの動作は、
- cURLで管理者としてログイン
- メールアドレス確認をしない場合、管理者としてメールアドレスを登録処理する
である。
管理者ログインがCGI版でログイン、メールアドレス登録がモジュール版で処理をしようとしていたため、モジュール版とCGI版ではセッション管理が異なるためメールアドレス登録が管理者扱いではなくなり、処理できてなかったわけである。ということは、/lists/以下もCGI版にしてしまえばよい。
PHPList全体をCGI版で動かすように.htaccessとphp.ini(CoreServerの場合のやつ)を修正したら、メールアドレス確認なしで動いてくれるようになった。気付けばなんともあっけないのだが、原因がわからずに深夜まで残業してしまったりしていたので何気に悔しかった。まあでも閃いてよかったわ〜。
ちなみにメールアドレス確認なしにした理由は、ケータイから登録された場合にPHPListのメアド確認用画面がケータイからは確認できないからです(テーブルレイアウトででかい!)。