twitterで指摘してくださった某有名人様のおかげで、判明しました。タイミングによっては、ktai用のコードをPC向けに吐いたり、PC用のコードを携帯に吐いたりしていました。対策前のwp super cacheと同じような感じです。ただ、W3TCはwp super cacheより少しインテリジェントな作りになってるので、ハッシュキーの作り方とかで対応できないか、ソースを少し読んでるところです。PHPは全くド素人なもんで、アレですけど。W3TCのコード自体は個人的に読みづらいとは感じないです。何とか読めてます。
W3TCのコンフィグファイルの中に、pgcache.mobile.checkとか、pgcache.mobile.whitelist, pgache.mobile.browsersなんてのを発見。ソース中にもあるけど、W3TCの設定画面では表示されない。非公開ファンクション扱い?
function _get_mobile_type()は、まず環境変数 HTTP_USER_AGENTを調べてセットされていればpgcache.mobile.whitelistを検索して、pgcache.mobile.whitelistにあるブラウザと一致すれば通常通りの動作を行う。次に、pgcache.mobile.browsersを検索して、HTTP_USER_AGENTと一致すれば、ブラウザ名を返すfunction _get_page_keyで、pgcache.mobile.checkが真かつ、$mobile_type(_get_mobile_type()の戻り値)が空白でなければ、ページキーを返す。キャッシュの管理はページキー毎にやってるから何とかなるかな?まだほんの少ししかソースを読んでないので、何とも言えない感じだが。
設定ファイルの pgcache.mobile.check をtrueにして、pgcache.mobile.browsersにKtai Styleで言及されてるデータをこんな感じで入れてみた。
‘pgcache.mobile.browsers’ => array(
‘DoCoMo’,
‘J-PHONE’,
‘J-EMULATOR’,
‘Vodafone’,
‘MOT(EMULATOR)’,
‘SoftBank’,
‘[VS]emulator’,
‘KDDI-’,
‘UP.Browser’,
‘emobile’,
‘Huawei’,
‘Nokia’,
‘mixi-mobile-converter’,
‘DDIPOCKET’,
‘WILLCOM’,
‘Opera Mini’,
‘Opera Mobi’,
‘PalmOS’,
‘Windows CE’,
‘PDA; SL-’,
‘PlayStation Portable’,
‘SONY/COM’,
‘Nitro’,
‘Nintendo’,
),
もっともW3TCのソースでは、strstr($_SERVER["HTTP_USER_AGENT"], trim($browser))になってるから、これだとOperaとかは困るかな?trim($browser)で空白取っちゃったら、マッチしないしよね?この場合は、$_SERVER["HTTP_USER_AGENT"]もtrimしないとまずいような気もする。ただ、何度も言うけどPHPはド素人なため悲しいかな、PHPの動作とか関数の仕様が良くわからん。trimは戻り値使わない場合は、即値で使えるだけ?それとも引数の変数自体を変えちゃうとかあるのかな?少しPHPを勉強せねば恐ろしくていじれない ![]()
今日は、もう寝るから明日以降少しだけPHPのお勉強しながらW3TCのテストします。
pgcache.mobile.whitelistを検索して、pgcache.mobile.whitelistにあるブラウザと一致すれば
通常通りの動作を行う。

