CakePHPの簡単なサンプルです。
PCからの接続するとPCサイト用のHTMLを表示し、携帯から接続すると携帯サイト用のHTMLを表示するサンプルです。

出力するHTMLの文字コードは、utf-8のみとします。

Index

  1. 環境
  2. 準備
  3. 端末(USER_AGENT)の判定

環境

CakePHPのバージョン1.2.1.8004を使用します。

僕の環境のPHPのバージョンは 5.2.3です。

携帯端末から接続かどうかの判別にPEARのNet_UserAgent_Mobileを使用します。
バージョンは1.0.0RC1です。

apacheのhttpd.confで、ドキュメントルートディレクトリに次のような設定を書きました。

<Directory "appディレクトリ/webroot">
  Options FollowSymLinks -Indexes
  AllowOverride All
  Order allow,deny
  Allow from all

  php_value default_charset UTF-8
  php_value mbstring.language Japanese
  php_value mbstring.internal_encoding UTF-8
  php_flag mbstring.encoding_translation OFF
  php_value mbstring.http_input auto
  php_value mbstring.http_output pass
</Directory>

主にシミュレータで、サイトに接続して、表示を確認します。
使用したシミュレーターは、次表のものです。

DoCoMo iモードHTMLシミュレータⅡ
au Openwave SDK 6.2
softbank ウェブコンテンツビューアー 6.0.1.146

一応、DoCoMoとsoftbankの実機で表示されることを確認しています。
auの実機では、未確認です。

準備

WWW_ROOTにある.htaccessなどでPEARライブラリへのパスを通しておきます。

例(.htaccess)

php_value include_path ".:/php/includes:VENDORS/PEAR"

端末(USER_AGENT)の判定

端末の判定は、app/config/bootstrap.phpの中で行うことにします。

app/config/bootstrap.php 抜粋
PHP:
  1. // 端末判定
  2. $carrier = get_carrier($is_mobile,$serial_number,$carrier_short_name);
  3. define('IS_MOBILE',$is_mobile);
  4. define('UAGENT_KIND',$carrier);
  5. define('MOBILE_SERIAL_NUMBER',$serial_number);
  6. define('CARRIER_SHORT_NAME',$carrier_short_name);

get_carrier関数内で、PEAR::Net_UserAgent_Mobileを使って、端末の判定をしています。

app/config/common_func.php get_carrier関数
PHP:
  1. function get_carrier(&$is_mobile,&$serial_number,&$carrier_short_name)
  2. {
  3.   include_once('Net/UserAgent/Mobile.php');
  4.  
  5.   $http_ua = $_SERVER['HTTP_USER_AGENT'];
  6.  
  7.   $agent = Net_UserAgent_Mobile::factory();
  8.   $model = $agent->getModel();
  9.  
  10.   $is_mobile = false;
  11.   $serial_number = null;
  12.   $carrier_short_name = null;
  13.   $carrier = null;
  14.  
  15.   if ($agent->isDoCoMo()) {
  16.     $carrier = UAGENT_DOCOMO;
  17.     $serial_number = $agent->getSerialNumber();
  18.     $carrier_short_name = $agent->getCarrierShortName();
  19.     $is_mobile = true;
  20.   }
  21.   else if ($agent->isSoftBank()) {
  22.     $carrier = UAGENT_SB;
  23.     $serial_number = $agent->getSerialNumber();
  24.     $carrier_short_name = $agent->getCarrierShortName();
  25.     $is_mobile = true;
  26.   }
  27.   else if ($agent->isEZweb()) {
  28.     $carrier = UAGENT_AU;
  29.     if(isset($_SERVER['HTTP_X_UP_SUBNO'])) {
  30.       $serial_number = $_SERVER['HTTP_X_UP_SUBNO'];
  31.     }
  32.     $carrier_short_name = $agent->getCarrierShortName();
  33.     $is_mobile = true;
  34.   }
  35.   else {
  36.     $carrier = UAGENT_PC;
  37.   }
  38.   unset($agent);
  39.   return $carrier;
  40. }

次回、コントローラーとビューのサンプルコードを投稿予定です。
追記 2009/02/05投稿しました。
CakePHPで携帯サイトを作る - HTML出力振り分け(2)

Tags: , , , , , ,

コメント / トラックバック 1件

  1. [...] 【Cake php】 このレベルまでたどり着けません。 CakePHPで携帯サイトを作る - HTML出力振り分け(1) « trekdevel [...]

コメントをどうぞ