- 締切済み
携帯サイトの構造について
現在パソコン用のサイトと携帯用のサイトがありパソコン用のサイトを httpdocs(root)/index.htmlとし携帯用のサイトを以下のようにしています。 ・au httpdocs/mo/au/index.html ・docomo httpdocs/mo/dc/index.html ・sofubank httpdocs/mo/sb/index.html (振り分けはhttpdocs/.htaccessで行っています) 要するにトップページだけで4ページ必要になっており更新などで必要以上に 手間に感じてしまいます。 3社共通で携帯用のサイトをhttpdocs/mo/index.htmlとして できるものなら1つのフォルダ済ませたいと思っております。 携帯サイトについて知識は豊富ではないのですが画像は.jpgか.gifでカバーできると思うのですが DOCTYPE宣言が3社違うのでここが引っかかってしまいます。 自分なりに調べてみたのですがpearのnet_UserAgent_Mobileや 絵文字の自動変換スクリプトなどみつかったのでDOCTYPE宣言の変換も phpでできるのかな?と思っているのですがphpはあまり触ったことがなく どのようにすればいいのかがわかりません・・・^^; なにかいい方法はありませんでしょうか?
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- hiroto1212
- ベストアンサー率51% (23/45)
携帯以外であれば~にアクセスしても・・・の件ですが、質問をはき違えていました。すいません。きっともう解決していると思いますが一応・・・。 /mo/index.phpに以下のような「携帯かどうかを調べて、もし携帯でなかったらエラーページへ飛ばす」という簡単なスクリプトを先頭に追記すればいいと思います。 以下のものはnet_UserAgent_Mobileを利用していない(というか能力的に利用できません^ ^;)、判別スクリプトです。 ANo.4のような判別のあとに(判別はwhile(){}内でやっています)エラーが出れば(つまり$ager=0のとき)header(location:URL)に飛ぶという設定を追加しただけです。 <?php $i=0; $aglist=array("DoCoMo","UP.Browser","Vodafone","J-PHONE"); $ager=0; while($i < count($aglist)){ if(strstr($_SERVER['HTTP_USER_AGENT'],$aglist[$i]) != false){ $ager=1; break; }else{ } $i++; } switch($ager){ case 0: header('location: error.html'); exit; case 1; break; } ?> --ここ以降にhtmlを記述--
- hiroto1212
- ベストアンサー率51% (23/45)
header("Location: http://www.yahoo.co.jp/");のエラーの件ですが(もう解決してるかもしれませんけど)、コピペしていろいろ試したところ(掲示板通してコピペしているので元の文字と完全に状態が一緒だとは思えませんけれども)、asdさんの書いた文字は、なぜかurlの一番最初の文字の「h」の部分だけがおかしいみたいです。 asdさんの投稿をコピペして試したら自分も文字化けしたurlに飛んでしましました。 不思議なことにそこだけ文字化けしてるんですね~なぜか。書き直せば正常に動作しますよ。多分。文字コードを一致させてphpを書けば今後も問題は起こらないんではないでしょうか? 構文自体は僕の環境で動作しましたから間違ってはいないと思います^ ^ 携帯以外であれば~にアクセスしても・・・の件ですけど、 それはheader("Location:~")が設定してあるから解決すると思いますが、 phpは exit; を付けるとその先はスクリプト部であろうとhtml部であろうと絶対に読み込まなくなります。以下をexitあるものとないもので試せばわかります。 <?php print 'exit前'; exit; print 'exit後'; ?> exit後、html部
- hiroto1212
- ベストアンサー率51% (23/45)
前のところににphpスクリプト載せたものです。 載せた後で調べてみたらUSER AGENTって機種ごとに違うんですね!! ということでそれを踏まえた上で書き直しました。 ドキュメントタイプ宣言は会社ごとにどう記述していいか分からなかったので「DoCoMoです」といった感じで適当に書いています。修正してください。 正常に動作しない場合は、条件であるUSER AGENTの大文字と小文字が間違っているのが原因なので、例えばVodafoneをvodafoneにするなどして、いいように修正してください。 html部は<?php ~ ?>の外側に通常通り書けばそのまま出力されます。 ----------------ここから ~ここにHTML~ <?php $agent=$_SERVER['HTTP_USER_AGENT']; if(strstr($agent,"DoCoMo") != false){ print '<!DOCTYPE HTML PUBLIC "DoCoMoです">'; }elseif(strstr($agent,"UP.Browser") != false){ print '<!DOCTYPE HTML PUBLIC "auです">'; }elseif(strstr($agent,"Vodafone") != false){ print '<!DOCTYPE HTML PUBLIC "softbankです">'; }elseif(strstr($agent,"J-PHONE") != false){ print '<!DOCTYPE HTML PUBLIC "softbankです">'; }else{ print '<!DOCTYPE HTML PUBLIC "defaultです">'; } ?> ~ここにHTML~ ここまで-------------
- hiroto1212
- ベストアンサー率51% (23/45)
最後のelse空白にしてもでOKです。まぁデフォルトのユーザーエーなんたらを書いておけばいいと思います。
- hiroto1212
- ベストアンサー率51% (23/45)
書きましたよ!!php初心者なのに書いたんだから、有効活用してくださいね!!文句は、、、受け付けます!!!!//のあとはコメントですからけしてOK。あと[改行]って書いてあるところでは改行してよんでくださいね。そこ以外は改行しないように。なんか問題起こるかもしれないので 以下のモノをindex.phpでホゾン。 -----------このあたりから <html> <meta>この辺は普通に書いてください</meta> <?php //<?php は「ここからがphpスクリプトですよ~」っていう合図です。これより前はphpの命令に含まれず、htmlとしてそのまま出力されます。[改行] $agent=$_SERVER['HTTP_USER_AGENT']; //$_SERVER('HTTP_USER_AGENT')で訪問者のUSER AGENT取得して$agentにその値を代入します( http://www.php.net/manual/ja/reserved.variables.php#reserved.variables.server 参照)。[改行] if($agent == "docomoのユーザーエーなんとか。このへんは順不同でいいです"){ //()が条件。()内の意味は「もし$agentがドコモのソレと一緒だったら」。[改行] print 'ここにドキュメントタイプのタグを書いてください'; //{}内が行う動作。print '~' は'~' の文字を文字通り「プリント」します。[改行] }elseif($agent == "auのユーザーエーなんとか"){ //elseifは知ってますよね。[改行] print 'ここにドキュメントタイプのタグを書いてください';[改行] }elseif($agent == "softbankのユーザーエーなんとか"){ //まぁこんな感じでwillcomeのとかも書いてったりとかすれば無限に増やせます。[改行] print 'ここにドキュメントタイプのタグを書いてください';[改行] }else{print "USER_AGENTを名乗れ!!"; //最後はelseで絞めてください[改行] } // ? > はphpスクリプトの終了を表します。この辺はhtmlと似てますね。[改行] ?> <body>あとお好きなように。 こんな感じで---------------
- swqamy
- ベストアンサー率37% (11/29)
絵文字の自動変換スクリプトを検索して見てみましたが各携帯会社を判断して変換しているようです。 これを利用して「この携帯会社ならこのDOCTYPE宣言を返す」といった関数を作成し、実行すればいいではないでしょうか? 念のため検索して見たサイトを載せておきます。
お礼
お返事ありがとうございます。 >これを利用して「この携帯会社ならこのDOCTYPE宣言を返す」といった関数を作成し、実行すればいいではないでしょうか? 参考サイトを例にUserAgent.phpに $docomo="docomoのDOCTYPE宣言"; $au="auのDOCTYPE宣言"; $softbank="softbankのDOCTYPE宣言"; としhttpdocs/mo/index.phpのDOCTYPE宣言を表示させたい箇所に ifやelseifなど使えば できそうかなとなんとなくはわかるのですが知識がないのでこれ以上どのように 応用すればいいのかわからないのですが教えて頂けますでしょうか?
お礼
お返事ありがとうございます。 net_UserAgent_MobileをつかってUserAgentを取得しそれにあった DOCTYPEを宣言させることまではおかげさまでできました^^ 以下のようにして携帯でなければ任意のページに飛ばすというようにしたいのですが エラーが出てしまうのですが <?php 省略 if ($agent->isDoCoMo()) { echo 'ドコモDOCTYPE'; }else if ($agent->isVodafone()) { echo 'ソフトバンクDOCTYPE'; }else if ($agent->isEZweb()) { echo 'auDOCTYPE'; }else { header("Location: http://www.yahoo.co.jp/"); } ?> <body> ・・・ rootに.htaccessをおき携帯であれば/mo/index.phpに飛ばすのですが 直で/mo/index.phpにパソコンでアクセスすると見れてしまうと思うので 携帯以外であれば/mo/index.phpにアクセスしても見れないようにすることはできるのでしょうか?