<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>青木ITプランニング &#187; 04.ケータイ</title>
	<atom:link href="http://www.aokiit.jp/category/%e3%82%b1%e3%83%bc%e3%82%bf%e3%82%a4/feed" rel="self" type="application/rss+xml" />
	<link>http://www.aokiit.jp</link>
	<description>PHP、Smarty、ケータイサイトについて発信中。書籍 「Smarty動的webサイト構築入門」(技術評論社) 好評発売中</description>
	<lastBuildDate>Thu, 05 Nov 2009 18:57:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ケータイサイトでPCアクセスをBASIC認証</title>
		<link>http://www.aokiit.jp/2009/05/649.html</link>
		<comments>http://www.aokiit.jp/2009/05/649.html#comments</comments>
		<pubDate>Mon, 18 May 2009 00:52:54 +0000</pubDate>
		<dc:creator>aoki</dc:creator>
				<category><![CDATA[04.ケータイ]]></category>

		<guid isPermaLink="false">http://www.aokiit.jp/?p=649</guid>
		<description><![CDATA[　ケータイサイトでPCからのアクセスを制限すると、自分のPCのFireFox + UserAgentSwitcherや各キャリアのシミュレータで表示確認できなくなります。私はPCのほうに慣れているので、これは不便です。
　事務所のIPアドレスが固定なら、そのIPアドレスを許可リストに追加します。しかし、関係者全員が固定IPをもっているともかぎりません。
　そこで、PCからのアクセスはBASIC認証で許可します。.htaccess に「Satisfy Any」を記述します。
# BASIC認証
AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
AuthName "Type your password please."
AuthType Basic
require valid-user

Satisfy Any

order deny,allow
deny from all

# imode
allow from 210.153.84.0/24
allow from 210.136.161.0/24
 .... 以下、省略 ....
]]></description>
			<content:encoded><![CDATA[<p>　ケータイサイトでPCからのアクセスを制限すると、自分のPCのFireFox + UserAgentSwitcherや各キャリアのシミュレータで表示確認できなくなります。私はPCのほうに慣れているので、これは不便です。</p>
<p>　事務所のIPアドレスが固定なら、そのIPアドレスを許可リストに追加します。しかし、関係者全員が固定IPをもっているともかぎりません。</p>
<p>　そこで、PCからのアクセスはBASIC認証で許可します。.htaccess に「Satisfy Any」を記述します。</p>
<pre># BASIC認証
AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
AuthName "Type your password please."
AuthType Basic
require valid-user

Satisfy Any

order deny,allow
deny from all

# imode
allow from 210.153.84.0/24
allow from 210.136.161.0/24
 .... 以下、省略 ....</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.aokiit.jp/2009/05/649.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ケータイのIPアドレス</title>
		<link>http://www.aokiit.jp/2009/05/647.html</link>
		<comments>http://www.aokiit.jp/2009/05/647.html#comments</comments>
		<pubDate>Tue, 12 May 2009 00:15:05 +0000</pubDate>
		<dc:creator>aoki</dc:creator>
				<category><![CDATA[04.ケータイ]]></category>

		<guid isPermaLink="false">http://www.aokiit.jp/?p=647</guid>
		<description><![CDATA[ケータイサイトでPCからのアクセスを禁止したいとき、ケータイからのIPアドレスだけを許可します。また、ケータイ向けの検索エンジンのクローラも許可します。
次のリストは、各キャリアの公式サイトからIPアドレスを取り出したものです。メールやPCビューワからのIPアドレスは含んでいません。これらのIPアドレスはときどき変更されるので、メンテナンスが必要です。
order deny,allow
deny from all
# i-mode
# http://www.nttdocomo.co.jp/service/imode/make/content/ip/index.html
allow from 210.153.84.0/24
allow from 210.136.161.0/24
allow from 210.153.86.0/24
allow from 124.146.174.0/24
# EZweb
# http://www.au.kddi.com/ezfactory/tec/spec/ezsava_ip.html
allow from 210.230.128.224/28
allow from 121.111.227.160/27
allow from 61.117.1.0/28
allow from 219.108.158.0/27
allow from 219.125.146.0/28
allow from 61.117.2.32/29
allow from 61.117.2.40/29
allow from 219.108.158.40/29
allow from 219.125.148.0/25
allow from 222.5.63.0/25
allow from 222.5.63.128/25
allow from 222.5.62.128/25
allow from 59.135.38.128/25
allow from 219.108.157.0/25
allow from 219.125.145.0/25
allow from 121.111.231.0/25
allow from 121.111.227.0/25
allow from 118.152.214.192/26
allow from 118.159.131.0/25
allow from [...]]]></description>
			<content:encoded><![CDATA[<p>ケータイサイトでPCからのアクセスを禁止したいとき、ケータイからのIPアドレスだけを許可します。また、ケータイ向けの検索エンジンのクローラも許可します。</p>
<p>次のリストは、各キャリアの公式サイトからIPアドレスを取り出したものです。メールやPCビューワからのIPアドレスは含んでいません。これらのIPアドレスはときどき変更されるので、メンテナンスが必要です。</p>
<pre>order deny,allow
deny from all
# i-mode
# <a href="http://www.nttdocomo.co.jp/service/imode/make/content/ip/index.html" target="_blank">http://www.nttdocomo.co.jp/service/imode/make/content/ip/index.html</a>
allow from 210.153.84.0/24
allow from 210.136.161.0/24
allow from 210.153.86.0/24
allow from 124.146.174.0/24</pre>
<pre># EZweb
# <a href="http://www.au.kddi.com/ezfactory/tec/spec/ezsava_ip.html" target="_blank">http://www.au.kddi.com/ezfactory/tec/spec/ezsava_ip.html</a>
allow from 210.230.128.224/28
allow from 121.111.227.160/27
allow from 61.117.1.0/28
allow from 219.108.158.0/27
allow from 219.125.146.0/28
allow from 61.117.2.32/29
allow from 61.117.2.40/29
allow from 219.108.158.40/29
allow from 219.125.148.0/25
allow from 222.5.63.0/25
allow from 222.5.63.128/25
allow from 222.5.62.128/25
allow from 59.135.38.128/25
allow from 219.108.157.0/25
allow from 219.125.145.0/25
allow from 121.111.231.0/25
allow from 121.111.227.0/25
allow from 118.152.214.192/26
allow from 118.159.131.0/25
allow from 118.159.133.0/25
allow from 118.159.132.160/27</pre>
<pre># softbank
# <a href="http://creation.mb.softbank.jp/web/web_ip.html" target="_blank">http://creation.mb.softbank.jp/web/web_ip.html</a>
allow from 123.108.236.0/24
allow from 123.108.237.0/27
allow from 202.179.204.0/24
allow from 202.253.96.224/27
allow from 210.146.7.192/26
allow from 210.146.60.192/26
allow from 210.151.9.128/26
allow from 210.169.130.112/28
allow from 210.175.1.128/25
allow from 210.228.189.0/24
allow from 211.8.159.128/25</pre>
<pre>#------------------------------------------------------------
# ケータイ向けの検索クローラ
#------------------------------------------------------------
# moba-crawler
# <a href="http://crawler.dena.jp/">http://crawler.dena.jp/</a>
allow from 202.238.103.126
allow from 202.213.221.97</pre>
<pre># froute
# <a href="http://search.froute.jp/howto/crawler.html">http://search.froute.jp/howto/crawler.html</a>
allow from 60.43.36.253</pre>
<pre># モバイルgoo
# <a href="http://help.goo.ne.jp/help/article/1142/">http://help.goo.ne.jp/help/article/1142/</a>
allow from 210.150.10.32/27
allow from 203.131.250.0/24</pre>
<pre># Livedoor
# <a href="http://helpguide.livedoor.com/help/search/qa/grp627">http://helpguide.livedoor.com/help/search/qa/grp627</a>
allow from 203.104.254.0/24</pre>
<pre># Google
# <a href="http://googlejapan.blogspot.com/2008/05/google.html">http://googlejapan.blogspot.com/2008/05/google.html</a>
allow from 72.14.199.0/25
allow from 209.85.238.0/25</pre>
<pre># Yahoo!
# <a href="http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html">http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html</a>
allow from 124.83.159.146/27
allow from 124.83.159.178/29
allow from 124.83.159.224/28
allow from 124.83.159.240/29</pre>
<pre># MSN Search
# (Microsoft社のIP範囲からMSNクローラがアクセスしてくる、ということらしいです)
allow from 65.52.0.0/14</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.aokiit.jp/2009/05/647.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PEAR::Net_UserAgent_Mobile用のi-mode機種情報xml</title>
		<link>http://www.aokiit.jp/2008/09/105.html</link>
		<comments>http://www.aokiit.jp/2008/09/105.html#comments</comments>
		<pubDate>Sun, 21 Sep 2008 13:25:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[01.書籍・Smarty動的webサイト構築入門]]></category>
		<category><![CDATA[02.PHP]]></category>
		<category><![CDATA[04.ケータイ]]></category>

		<guid isPermaLink="false">http://www.aokiit.jp/?p=105</guid>
		<description><![CDATA[　Smarty動的Webサイト構築入門の5.3 Smartyとケータイで、PEAR::Net_UserAgent_Mobileパッケージを使っています。このパッケージは外部ファイルからi-mode機種情報を読み込むことができます。本の付録CDROMに、筆者作成のdocomo_netuamobile.xmlを収録しました。
　ところが、このdocomo_netuamobile.xmlには不具合があり、下から5～6行目の「SO902WP+」以降を正しく読み込みません。次の2点の修正が必要です。
　1点目は、docomo_netuamobile.xmlです。「SO902WP+」ではなく、「SO902WPplus」とします。次のファイルは、2008/9/21時点で、288機種あります。
docomo_netuamobile.xmlのダウンロードページ
　2点目は、keitai_ini.phpを修正して、「SO902WP+」自体を認識できるようにします。SO902WP+の場合は、Net_UserAgent_Mobile内部の機種情報を使い、そうでない場合は、docomo_netuamobile.xmlを使うようにします。
修正前
7: $_SERVER['DOCOMO_MAP'] = dirname(__FILE__) . &#8220;/docomo_netuamobile.xml&#8221;;
8: $agent = &#38;Net_UserAgent_Mobile::factory();
9: $display = $agent-&#62;getDisplay();
修正後
7:  if ( ! preg_match(&#8216;/SO902iWP[+]/&#8217;, $_SERVER['HTTP_USER_AGENT']) ) {
8:     $_SERVER['DOCOMO_MAP'] = dirname(__FILE__) . &#8220;/docomo_netuamobile.xml&#8221;;
9:   }
10: $agent = &#38;Net_UserAgent_Mobile::factory();
11: $display = $agent-&#62;getDisplay();

Amazon.co.jpの詳細ページへ
]]></description>
			<content:encoded><![CDATA[<p>　Smarty動的Webサイト構築入門の5.3 Smartyとケータイで、PEAR::Net_UserAgent_Mobileパッケージを使っています。このパッケージは外部ファイルからi-mode機種情報を読み込むことができます。本の付録CDROMに、筆者作成のdocomo_netuamobile.xmlを収録しました。</p>
<p>　ところが、このdocomo_netuamobile.xmlには不具合があり、下から5～6行目の「SO902WP+」以降を正しく読み込みません。次の2点の修正が必要です。</p>
<p>　1点目は、docomo_netuamobile.xmlです。「SO902WP+」ではなく、「SO902WPplus」とします。次のファイルは、2008/9/21時点で、288機種あります。</p>
<p><a href="/2009/01/303.html">docomo_netuamobile.xmlのダウンロードページ</a></p>
<p>　2点目は、keitai_ini.phpを修正して、「SO902WP+」自体を認識できるようにします。SO902WP+の場合は、Net_UserAgent_Mobile内部の機種情報を使い、そうでない場合は、docomo_netuamobile.xmlを使うようにします。</p>
<p>修正前<br />
7: $_SERVER['DOCOMO_MAP'] = dirname(__FILE__) . &#8220;/docomo_netuamobile.xml&#8221;;<br />
8: $agent = &amp;Net_UserAgent_Mobile::factory();<br />
9: $display = $agent-&gt;getDisplay();</p>
<p>修正後<br />
7:  if ( ! preg_match(&#8216;/SO902iWP[+]/&#8217;, $_SERVER['HTTP_USER_AGENT']) ) {<br />
8:     $_SERVER['DOCOMO_MAP'] = dirname(__FILE__) . &#8220;/docomo_netuamobile.xml&#8221;;<br />
9:   }<br />
10: $agent = &amp;Net_UserAgent_Mobile::factory();<br />
11: $display = $agent-&gt;getDisplay();</p>
<p style="text-align: center;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774136301/mwwebstu-22"><img src="http://ecx.images-amazon.com/images/I/51tY5PtGsuL._SL500_SS100_.jpg" alt="Smarty動的Webサイト構築入門" /><br />
Amazon.co.jpの詳細ページへ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aokiit.jp/2008/09/105.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Softbank携帯で音声3gpをダウンロードできない</title>
		<link>http://www.aokiit.jp/2008/01/36.html</link>
		<comments>http://www.aokiit.jp/2008/01/36.html#comments</comments>
		<pubDate>Tue, 01 Jan 2008 18:57:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[02.PHP]]></category>
		<category><![CDATA[04.ケータイ]]></category>

		<guid isPermaLink="false">http://aokiit.local/?p=93</guid>
		<description><![CDATA[　Softbank携帯(802SH)で、音声3gpをダウンロードしようとすると、「エラーが発生しました。レスポンスが不正です。(WJ46098E)」と表示される現象がありました。動画3gpは問題なくダウンロード・再生できるのに、なぜ？
　3gpファイルは、PHPで吐き出しています。ファイル名は $_SERVER['PATH_INFO'] からとってきます。こんな感じです。
＜href=&#8221;download.php/xxx/yyy.3gp&#8221;＞ダウンロード＜/a＞
　実はセッションを使っていて、session_cache_limiter(&#8216;nocache&#8217;)が原因でした。まる一日かかった、その途中経過は．．．
　まず、確認したことは、
・PHPを使わず、3gpファイルに直接アクセスしたら？
→携帯にダウンロードできた。
・&#8221;download.php/xxx/yyy.3gp にwgetでアクセスしてみたら？
→元ファイルと同じ内容で保存でき、再生もできた。
なので、ファイルを読んで、吐き出す処理自体に問題はないようです。
　次に、レスポンスヘッダを比較しました。セッションを使っているので、セッションIDがクッキーにありますね。むむっ？「Cache-Control」がずいぶん長い！

直接アクセス
cache-control: no-cache

PHP吐き出し
Set-Cookie: PHPSESSID=********; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
(続き) pre-check=0
Pragma: no-cache

　テスト用のPHPを組んで、どの行が原因か調べました。結果は「Cache-Control」に「no-store」があるとエラーでした。技術資料http編に「no-store」が記載されていますが、全ての機種で対応していない、ということなのでしょうか。

Cache-Control: no-store　→×
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0　→○

　session_cache_limiter の値で、レスポンスヘッダがどう変わるか調べました。

session_cache_limiter('public' )
↓
Expires: Wed, 02 Jan 2008 09:43:55 GMT
Cache-Control: public, max-age=10800

session_cache_limiter('private')
↓
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: private, max-age=10800, pre-check=10800

session_cache_limiter('private_no_expire')
↓
Cache-Control: private, max-age=10800, pre-check=10800

session_cache_limiter('nocache')
↓
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, [...]]]></description>
			<content:encoded><![CDATA[<p>　Softbank携帯(802SH)で、音声3gpをダウンロードしようとすると、「エラーが発生しました。レスポンスが不正です。(WJ46098E)」と表示される現象がありました。動画3gpは問題なくダウンロード・再生できるのに、なぜ？</p>
<p>　3gpファイルは、PHPで吐き出しています。ファイル名は $_SERVER['PATH_INFO'] からとってきます。こんな感じです。<br />
＜href=&#8221;download.php/xxx/yyy.3gp&#8221;＞ダウンロード＜/a＞</p>
<p>　実はセッションを使っていて、session_cache_limiter(&#8216;nocache&#8217;)が原因でした。まる一日かかった、その途中経過は．．．</p>
<p>　まず、確認したことは、<br />
・PHPを使わず、3gpファイルに直接アクセスしたら？<br />
→携帯にダウンロードできた。<br />
・&#8221;download.php/xxx/yyy.3gp にwgetでアクセスしてみたら？<br />
→元ファイルと同じ内容で保存でき、再生もできた。<br />
なので、ファイルを読んで、吐き出す処理自体に問題はないようです。</p>
<p>　次に、レスポンスヘッダを比較しました。セッションを使っているので、セッションIDがクッキーにありますね。むむっ？「Cache-Control」がずいぶん長い！</p>
<pre class="source">
直接アクセス
<b>cache-control: no-cache</b>

PHP吐き出し
Set-Cookie: PHPSESSID=********; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
<b>Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
(続き) pre-check=0</b>
Pragma: no-cache
</pre>
<p>　テスト用のPHPを組んで、どの行が原因か調べました。結果は「Cache-Control」に「no-store」があるとエラーでした。技術資料http編に「no-store」が記載されていますが、全ての機種で対応していない、ということなのでしょうか。</p>
<pre class="source">
Cache-Control: <b>no-store</b>　→×
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0　→○
</pre>
<p>　session_cache_limiter の値で、レスポンスヘッダがどう変わるか調べました。</p>
<pre class="source">
session_cache_limiter('<b>public</b>' )
↓
Expires: Wed, 02 Jan 2008 09:43:55 GMT
Cache-Control: public, max-age=10800

session_cache_limiter('<b>private</b>')
↓
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: private, max-age=10800, pre-check=10800

session_cache_limiter('<b>private_no_expire</b>')
↓
Cache-Control: private, max-age=10800, pre-check=10800

session_cache_limiter('<b>nocache</b>')
↓
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: <b>no-store</b>, no-cache, must-revalidate, post-check=0,
(続き) pre-check=0
</pre>
<p>　もともとsession_cache_limiter()を呼んでいなかったので、デフォルトの&#8217;nocache&#8217;だったようです。&#8217;private_no_expire&#8217; にしたところ、音声3gpファイルをダウンロード・再生ができるようになりました。</p>
<hr />
音声3gpファイル用のディレクトリに置く .htaccess の例</p>
<pre class="source">
AddType audio/3gpp .3gp
AddType audio/3gpp2 .3g2

Header set cache-control "no-cache"
Header set x-jphone-copyright "no-transfer"
</pre>
<p>　802SHでは、「x-jphone-copyright &#8220;no-transfer&#8221;」がない場合、<br />
・動画3gp　→　○ダウンロード・再生<br />
・音声3gp　→　×「エラーが発生しました。レスポンスが不正です。(WJ46098E)」<br />
でした。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aokiit.jp/2008/01/36.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP:ケータイのキャリア判別</title>
		<link>http://www.aokiit.jp/2007/05/18.html</link>
		<comments>http://www.aokiit.jp/2007/05/18.html#comments</comments>
		<pubDate>Sun, 27 May 2007 18:20:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[02.PHP]]></category>
		<category><![CDATA[04.ケータイ]]></category>

		<guid isPermaLink="false">http://aokiit.local/?p=37</guid>
		<description><![CDATA[　アクセスしてきたケータイがi-mode/EZweb/SoftBankかの判定は、かつてはUserAgentだけで判別していました。しかし、vodafoneの一部機種はUserAgentに&#8221;UP.Browser&#8221;を含んでいたり、UserAgentに&#8221;vodafone&#8221;がなかったりします。今後もUserAgentがイレギュラーな新機種が発売される可能性もあり、UserAgentだけに頼るのは無理があるようです。
　今回紹介する方法は、UserAgentと他の変数を使う方法です。UserAgentで判別できない場合は、SoftBank特有・EZweb特有の変数があるかどうかを調べます。もし新機種が発売されて、UserAgentで判別できなかったとしても「未対応です」と表示せずにすみます。
　例えば、Smartyのテンプレートを切替えたい場合は、templates/0/hoge.tpl ～ templates/3/hoge.tpl を用意して、次のように使います。

require_once( 'bc.inc.php' );
$n = BC_get_carrier();
$smarty->display( "$n/hoge.tpl" );

　各キャリアごとのディレクトリ名を数字にするのは、正直なところ私もしっくりきません。&#8221;pc&#8221;/&#8221;i&#8221;/&#8221;ez&#8221;/&#8221;sb&#8221;などにしたいところです。しかし、J-PHONE→vodafone→SoftBankと社名変更があったので、考えざるを得ません。数字が一番気にならないと思います。
　以下を適当なファイル名(例えばbc.inc.php)で保存してください。(＜?php と ?＞で囲んでください。)

define( "BC_PC"       ,  0 );
define( "BC_EZWEB"    ,  1 );
define( "BC_VODAFONE" ,  2 );
define( "BC_SOFTBANK" ,  2 );
define( "BC_IMODE"    ,  3 );

function BC_get_carrier ()
{
  $ua = $_SERVER['HTTP_USER_AGENT'];
 [...]]]></description>
			<content:encoded><![CDATA[<p>　アクセスしてきたケータイがi-mode/EZweb/SoftBankかの判定は、かつてはUserAgentだけで判別していました。しかし、vodafoneの一部機種はUserAgentに&#8221;UP.Browser&#8221;を含んでいたり、UserAgentに&#8221;vodafone&#8221;がなかったりします。今後もUserAgentがイレギュラーな新機種が発売される可能性もあり、UserAgentだけに頼るのは無理があるようです。</p>
<p>　今回紹介する方法は、UserAgentと他の変数を使う方法です。UserAgentで判別できない場合は、SoftBank特有・EZweb特有の変数があるかどうかを調べます。もし新機種が発売されて、UserAgentで判別できなかったとしても「未対応です」と表示せずにすみます。</p>
<p>　例えば、Smartyのテンプレートを切替えたい場合は、templates/0/hoge.tpl ～ templates/3/hoge.tpl を用意して、次のように使います。</p>
<pre class="source">
require_once( 'bc.inc.php' );
$n = BC_get_carrier();
$smarty->display( "$n/hoge.tpl" );
</pre>
<p>　各キャリアごとのディレクトリ名を数字にするのは、正直なところ私もしっくりきません。&#8221;pc&#8221;/&#8221;i&#8221;/&#8221;ez&#8221;/&#8221;sb&#8221;などにしたいところです。しかし、J-PHONE→vodafone→SoftBankと社名変更があったので、考えざるを得ません。数字が一番気にならないと思います。</p>
<p>　以下を適当なファイル名(例えばbc.inc.php)で保存してください。(＜?php と ?＞で囲んでください。)</p>
<pre class="source">
define( "BC_PC"       ,  0 );
define( "BC_EZWEB"    ,  1 );
define( "BC_VODAFONE" ,  2 );
define( "BC_SOFTBANK" ,  2 );
define( "BC_IMODE"    ,  3 );

function BC_get_carrier ()
{
  $ua = $_SERVER['HTTP_USER_AGENT'];
  $ca = BC_PC;

  if ( preg_match('/docomo/i', $ua) ) {
    $ca = BC_IMODE;
  } else if ( preg_match('/j-phone|vodafone|softbank/i', $ua) ) {
    $ca = BC_SOFTBANK;
  } else if ( preg_match('/J-EMULATOR|Vemulator/i', $ua) ) {
    $ca = BC_SOFTBANK;
  } else if ( preg_match('/kddi/i', $ua) ) {
    $ca = BC_EZWEB;

  } else if ( isset($_SERVER['HTTP_X_JPHONE_DISPLAY']) ) {
    $ca = BC_SOFTBANK;
  } else if ( isset($_SERVER['HTTP_X_EMULATOR_DISPLAY']) ) {
    $ca = BC_SOFTBANK;

  } else if ( isset($_SERVER['HTTP_X_UP_SUBNO']) ) {
    $ca = BC_EZWEB;
  } else if ( isset($_SERVER['HTTP_X_UP_DEVCAP_SCREENPIXELS']) ) {
    $ca = BC_EZWEB;
  }

  return $ca;
}
</pre>
<p>　なお、もっとも確実な方法は、アクセス元のIPアドレス(REMOTE_ADDR)で判別する方法です。各キャリアごとにゲートウェイのIPアドレス範囲が公開されています。IPアドレス範囲は、ごくたま～に変更されるので、定期的に各キャリアの技術ページをチェックする必要があります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aokiit.jp/2007/05/18.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
