- 締切済み
携帯からアクセスしているのにpcのページが表示
携帯からアクセスしているのに パソコンのページが表示されてしまう。 phpのページに ”別サーバーにあるページ”をinclude するとパソコンのページが表示されているのですが、携帯からアクセスして携帯ページが表示されるようにするにはどうすれば、よいのでしょうか? 携帯から直で”別サーバーにあるページ”にアクセスすると ちゃんと携帯ページが表示されます!! ”別サーバーにあるページ”に、携帯からアクセスしていると認識させるには、phpページを、どうすれば可能でしょうか? ご存知の方いらっしゃいましたら、ご教授お願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- tomaju
- ベストアンサー率76% (84/110)
phpのページの文字コードと、取り込んだ携帯ページとで文字コードが 違っているかもしれません。 echo で出力する前に文字コードの変換をかけて、 phpのページと合わせる必要があるかと思います。 echo file_get_contents($url, false, $context); のところを以下のようにしてみてください。 $html = file_get_contents($url, false, $context); echo mb_convert_encoding($html, 'UTF-8', 'SJIS'); ここで UTF-8 と SJIS は一例です。 それぞれ、実際のphpのページの文字コード、携帯ページの文字コードに にしてください。 なおマルチバイト文字列関数(mbstring)が使えるようにサーバーが 設定されていないと mb_convert_encoding は使えません。 PHP Fatal error: Call to undefined function mb_convert_encoding のエラーが出るか、 ページが真っ白になるかすると思います。 http://php.net/manual/ja/function.mb-convert-encoding.php
- tomaju
- ベストアンサー率76% (84/110)
> phpのページに ”別サーバーにあるページ”をinclude すると とのことでしたので、phpページのどこか、 <BODY>と</BODY>の間のどこかだと思うのですが、 次のように書かれているものと考えました。 <?php include "別サーバーにあるページ"; ?> include の記述を丸々置き換えることを想定しました。 <?php // include "別サーバーにあるページ"; $url = '別サーバーにあるページ'; $opts = array( 'http' => array( 'header' => "User-Agent: ".$_SERVER['HTTP_USER_AGENT']."\r\n" ) ); $context = stream_context_create($opts); echo file_get_contents($url, false, $context); ?> > まんまをphpファイルにしたりしまいたが変化がありません。 ご案内したコードだけを書いたファイルをアップロードされたのですかね。 そのphpファイルに携帯からアクセスしたとき、別サーバーにある パソコン用ページが表示されたでしょうか? それとも何も表示されなかったでしょうか? なお、別サーバーにあるパソコン用ページが、 ユーザーエージェント情報以外の情報、 例えばアクセス元のIPアドレスを用いて、 パソコンか携帯を判別していれば、 お役に立てないです。。。
- tomaju
- ベストアンサー率76% (84/110)
別サーバーにあるページが、ユーザーエージェント情報を参照して 内容を切り替えているとすれば、 別サーバーにあるページ を取ってくる際に、 php のページにアクセスしている携帯端末のユーザーエージェント情報を 送信してやればいいと思います。 include の際にユーザーエージェント情報を送信する方法ちょっと わからないので、他の方法で取ります。 ★file_get_contents と stream_context_create を使った例 $url = 'http://www.example.com/test.html'; $opts = array( 'http' => array( 'header' => "User-Agent: ".$_SERVER['HTTP_USER_AGENT']."\r\n" ) ); $context = stream_context_create($opts); echo file_get_contents($url, false, $context); ★PEAR HTTP_Client を使った例 require_once "HTTP/Client.php"; $url = 'http://www.example.com/'; $cl = new HTTP_Client(); $cl->setDefaultHeader(array('User-Agent'=>$_SERVER['HTTP_USER_AGENT'])); $cl->get($url); $res = $cl->currentResponse(); echo $res['body']; 参考URL: stream_context_create http://www.php.net/manual/ja/function.stream-context-create.php file_get_contents http://jp2.php.net/manual/ja/function.file-get-contents.php PEAR HTTP_Client http://pear.php.net/manual/ja/package.http.http-client.php Wikipedia のデータ取得方法について http://d.hatena.ne.jp/harapeko_san/20110319/1300554990
補足
tomaju様!! 2種類のやり方をアドバイスいただきありがとうございます。 $url = ”別サーバーにあるページ” を入力して ★file_get_contents と stream_context_create を使った例 ★PEAR HTTP_Client を使った例 両方試してみました!!phpのページに入力しました! <HEAD></HEAD>内に挿入したり <BODY></BODY>内に挿入したり まんまをphpファイルにしたりしまいたが変化がありません。 使い方がわかっていないみたいです。 そのプログラムはどう使うのでしょうか?
- cwm474
- ベストアンサー率0% (0/0)
marin1952さん、こんにちは >携帯からアクセスして携帯ページが表示されるようにするにはどうすれば、よいのでしょうか? サーバー情報に含まれるUSERAGENTでPCかMBを判別して、リダイレクトしたらいかがでしょうか? phpでは、$_SERVER['HTTP_USER_AGENT']に情報が含まれていますよ
補足
cwm474様、ありがとうございます。 アクセスするphpで判別するには、どう記述すればよろしいのでしょうか?
補足
tomaju 様。 こと細かいアドバイスありがとうございます。 ↓下記のとおり、置き換えると!携帯ページが表示されました!! しかしながら文字化けしています。どうすれば良いのでしょうか? ↓下記は丸ごとコピペしたものです ーーーーーーーーーーーーーーーー <?php include "別サーバーにあるページ"; ?> include の記述を丸々置き換えることを想定しました。 <?php // include "別サーバーにあるページ"; $url = '別サーバーにあるページ'; $opts = array( 'http' => array( 'header' => "User-Agent: ".$_SERVER['HTTP_USER_AGENT']."\r\n" ) ); $context = stream_context_create($opts); echo file_get_contents($url, false, $context); ?>