(1)3キャリア対応
(2)別ファイルにあるユーザエイジェント一覧の一部を読み込む
もっともシンプルに書いたPHPスクリプトを教えてください。
画像のみなら
http://www.marguerite.to/Nihongo/Labo/PHP4Mobile/ImageDistri...
中身もそれぞれに対応させるなら
http://www.marguerite.to/Nihongo/Labo/PHP4Mobile/PageDistrib...
こんな感じ。後半部分をそれぞれincludeすればよいかと。
「PCサイト->携帯変換スクリプト」はいかがでしょう。
GDを使って画像の変換を行います。
(多機能であるため、シンプルではないかもしれません。)
PC向けウェブサイトのHTMLや画像を、iモードなどの携帯電話端末で閲覧可能な形式に、サーバサイドで変換するPHPスクリプトです。画像の縮小や形式の変換、RSSの変換、ウェブサイトやページ内の簡便な検索、Referer送信やCookie保存の擬似的な実現といった機能を有します。
(2)の機能ですが、ClientDetect.class.phpというファイルで端末の判定、および端末ごとの設定を行っています。
DoCoMo端末についてはDevInfo_DoCoMo.inc.phpというファイルに機種情報を持たせています。
画像の変換処理自体はim.phpというファイルで行います。
一度確認してみてはいかがでしょうか。
質問の(2)の意図はよくわからんのですが…。
PHPなら、PEARパッケージ(標準規約に則って開発されているクラスライブラリ)にNet_UserAgent_Mobileというのがあり、携帯クライアントについて、機種名や画面サイズなどを容易に取得することができます。
http://pear.php.net/package/Net_UserAgent_Mobile
require_once 'Net/UserAgent/Mobile.php';
$agent =& Net_UserAgent_Mobile::factory();
var_dump( $agent->getName() ); // キャリア名
var_dump( $agent->getModel() ); // 機種名
$display = $agent->getDisplay() );
var_dump( $display->getWidth() ); // 画面の横幅
シンプルには書かれてませんが(笑)、この類を自力で用意するとなると、キャリアが仕様を変更したときに自力で修正しなければならず、結構面倒なので、それ専用に継続して開発されているものを利用するほうが、手間が省けて開発効率も向上します。
ちなみに、PEARのインストールは以下。
http://pear.php.net/manual/ja/installation.php
上で出ているpc2m(PCサイト->携帯変換)のClientDetectも同じように使えます。
require_once 'ClientDetect.class.php';
$agent =& new ClientDetect();
var_dump( $agent->dev_type ); // キャリア名
var_dump( $agent->dev_name ); // 機種名
$agent->getScreenInfo();
var_dump( $agent->screen['width'] ); // 画面の横幅
こちらはGIF|JPEG|PNGの対応も取得できます(もっとも、機種名やバージョンなどからでも判定できますが)。
以下は本来の質問の趣旨からはズレると思いますが。
ケータイでは機種ごとに画面サイズや対応フォーマットが異なるため、それぞれに応じた画像ファイルを個別に用意しようとすると、当然かなりの手間がかかります(最近の機種だけに対象を限定するなら、横幅240ピクセルのJPEGで統一してしまってもいいかもしれませんが)。
PHPで、オリジナルの画像を機種に応じて変換すると、その手間が省けます。しかし、変換にはマシンパワーと処理時間がある程度はかかりますので、多くの利用者が見込まれる場合は、やはりあらかじめ用意しておくか、あるいはいったん変換した画像はファイルに保存しておいて、同じ機種が同じ画像を要求してきたら、再度変換はせずに、保存してある変換済みのものを表示するという仕組みを用意するといいでしょう。
PHPのGD2ライブラリを利用すれば、変換そのものは非常に簡単に行えます。
http://www.php.net/manual/ja/ref.image.php
以下は、Googleトップページのロゴマーク(276×110ピクセルのGIF)を、50%縮小してJPEGで表示する例。
$uri = 'http://www.google.co.jp/intl/ja_jp/images/logo.gif';
$original= @imageCreateFromGIF($uri); // オリジナル画像の取得
$new= imageCreateTrueColor(138, 55);
imageCopyResampled($new, $original, 0, 0, 0, 0, 138, 55, 276, 110); // 50%縮小
header('Content-Type:image/jpeg');
imageJPEG($new); // JPEGで表示
imageDestroy($original);
imageDestroy($new);
imageJPEG()は、パラメータにファイル名を与えてやると、画面に出力せずにファイルに書き出します。上述のような、変換済みの画像をファイルに保存することで過負荷対策を行う場合は、端末が画像を要求してきたらば、該当するファイルがあればそれを表示して終了で、なければオリジナルを変換→書き出したファイルを表示、という処理を加えるといいと思います。
コメント(0件)