|
はじめまして。
最近になってphpBBを知りました。
カッコいいテンプレートとかあってコレいいですよねぇ~
携帯用のMODとかないのが残念です。
なので、shigepさんのを参考にチャレンジしてみました!
※注意※
以下の作業はセキュリティーが低下します。
【要件】
同じURLを叩いて、
携帯の場合は携帯用のログイン画面へ、
PCの場合は、PC用のログイン画面へ。
ユーザーがログイン後は、ユーザーがどっちのスタイルをプロフィールで設定していようが、
入り口のスタイルがそのまま継承されること。
【環境】
phpBB2.0.19日本語[EUC-JP]版
DB:Postgres
DB内の文字エンコード:EUC
php.iniの設定:
mbstring.http_output EUC-JP
mbstring.internal_encoding EUC-JP
【用意したもの】
Change Style MOD 0.9.6
phpBBmobileTemplate.zip
と、なっております。
【S-JIS問題】
まずは、shigepの(1)の問題ですが、
S-JISに変換しなくてもいいじゃん
そのままEUCでいってしまえ~です。
各キャリアは公式に発表してなかったりしますが、
EUCにはそれなりに対応しています。
Docomo:FOMAはOK、PDC端末もそれなりにいけるはず。
Vodafone:2.5G端末以上でOKのはず。評判の悪い新3G端末は知りません・・・
au:HDML端末は、まず別の問題もあり捨てる。
XHTML端末は多分それなりに対応しているんじゃないかと思います。
WIN機はOK、a5000シリーズでも見れました。
※EUCについては、私が調べたので、誤りあるかも。
なので、
何もせずに、強引に解消です。
【振り分けくん】
shigepさんの(2)について、
わたしのディレクトリ構成は
/DocumentRoot/phpBB/
となっていますので、
DocumentRoot直下にUserAgentにより振り分ける名付けて「振り分けくん(index.php)」を用意しました。
--------------------振り分けくんここから--------------------
<?php
$str_agent = getCarrier($_SERVER["HTTP_USER_AGENT"]);
if($str_agent == 0){
$url="http://somewhere.co.jp/phpBB/changestyle.php?s=subSlider";
}elseif($str_agent < 0){
header("Location:". "http://somewhere.co.jp/non_device.php");
exit;
}else{
$url="http://somewhere.co.jp/phpBB/changestyle.php?s=mobile";
}
header("Location:". $url);
exit;
//********************************************************
//* キャリアの取得 getCarrier *
//********************************************************
//* キャリアのの取得 *
//********************************************************
//* 引数 $str_user_agent :[I ] HTTP_USER_AGENT *
//* 戻り値 :キャリア *
//********************************************************
//* HTTP_USER_AGENTの例: *
//* DoCoMo/1.0/D501i *
//* DoCoMo/1.0/D210i/c10 *
//* DoCoMo/2.0 F2051(c100;TB) *
//* DoCoMo/1.0/D505i/c20/TB/W20H10 *
//* DoCoMo/2.0 F902i(c100;TB;W23H12) *
//* DoCoMo/2.0 N2001(c10) *
//* J-PHONE/[ブラウザバージョン]/[機種名] *
//* J-PHONE/[ブラウザバージョン]/[機種名]/[端末シリアル番号]
//* KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0 *
//* UP.Browser/3.01-HI02 UP.Link/3.2.1.2 *
//********************************************************
function getCarrier($str_user_agent) {
if(ereg("DoCoMo\/1\.0\/", $str_user_agent)) {
return 1;
} else if(ereg("DoCoMo\/2\.0", $str_user_agent)) {
return 1;
} else if(ereg("J-PHONE\/", $str_user_agent)) {
return 2;
} else if(ereg("UP\.Browser\/", $str_user_agent)) {
if(ereg("^UP\.Browser\/", $str_user_agent)) {
//先頭にUP.Browserの文言がある場合は、HDML端末
return -1;
}
return 3;
} else {
return 0;
}
}
?>
--------------------振り分けくんここまで--------------------
つぎの作業は
【セッション管理】です。
phpBBはセッション管理を当然行なっています。
一方、ほとんどの携帯端末はクッキーをサポートしていません。
また、phpをデフォルトインストールした場合は、
セッションIDがURLに埋め込まれない設定になっています。
当然、URLに埋め込まれている人はやらなくてOKです。
なので、セッションIDがURLに埋め込まれるように.htaccessに設定します。
---------.htaccessに追記----------
php_value session.use_trans_sid 1
php_value session.save_path /tmp
-----------------------------------
なお、php.iniをいじれる環境の方は、そちらで設定してもOKです。
この設定はセキュリティを低下させますが、phpBBはセッションのタイマー管理も行なっているようなので、
私の場合は割り切りました。
これで完成!
って、思ったのですが・・・
携帯シミュレータでは動くのに、
実機では動かない・・・
わらない・・・
悩みましたが、先程解決しました!
キタ━━━━ヽ(゚∀゚ )ノ━━━━!!!!
IPアドレスでもphpBBは完全一致ではないものの、認証の対象としていました。
携帯では、特にDocomoでは、同じSessionでも、
RequestしてくるIPアドレスが全く変わります。
なので、このチェックを甘くするようにコードを変更しました。
大人の事情により、私のコードは記述できませんが、
/include/session.phpの350行目あたりを以下の様に変更とかでもいいと思います。
---------session.php---------------
$ip_check_s = substr($userdata['session_ip'], 0, 6);
$ip_check_u = $ip_check_s;
-----------------------------------
※このコード変更は、著しくセキュリティを低下させます!
【login.phpの変更】
ここまでやっても、ログイン後、スタイルが上手く継承されなかったので、
スタイルをGetして、index.phpへのRedirectするような記述の箇所に
リダイレクト先URLに「s=スタイル」が付加されるようにlogin.phpを変更しました。
ここは、ちょっと自信なしです。
取り敢えず、それで動いたのでヨシとしました。
【sid】
phpBBのセッションIDのURLパラメータ名がsidとなっています。
sidはVodafoneの公式サイトだと別の意味(サービスIDだっけかな)で使用しています。
念の為変更しました。
【language_mobile】
そんなに難しくないと思うので、どなたかチャレンジして、教えてください!
私はココで力突きましたw
多分、common.phpの中であるスタイルのときは、
こっちのLangを使う(配列を上書きする)とかにすれば、動くんでないかな・・・
少々、長くなりましたが
ご参考になればと。
|