47日目:User_Agentを調べる

新サイトでは、UAを調べて、その機種にあわせた適切な表示を行います。という訳で、さくっと調べる方法を探したところよく分からず、なんと5時間ほど悪戦苦闘してしまいました(笑)。

いいですか、いまから書く情報は、日本ではまだ誰も書いていない貴重な情報です。心して読んで下さい。

actionの中でブラウザの user_agentを読むには、
$ua = $this->getRequest()->getHttpHeader('User_Agent');
とするんですよ!!

いやーみんさん、書籍1冊分ぐらいの貴重な情報でしたね!
そんな訳で、サイトのTOPにアクセスした場合、携帯の場合は、キャリア名を、PSPなどの場合は右メニューに機種名を表示するようにしてみました。UAみているだけなのでいくらでも偽装できちゃいますが、それで特に問題ないです。

/var/www/podtv/apps/frontend/modules/default/actions/actions.class.php

  public function executeIndex()
  {
	$ua = $this->getRequest()->getHttpHeader('User_Agent');
	if ( preg_match( "/DoCoMo/", $ua))
	{
		return $this->renderText("<html><body>docomoの携帯ですね。対応までしばらくお待ちください</body></html>");
	} elseif ( preg_match( "/KDDI/", $ua)){
		return $this->renderText("<html><body>KDDIの携帯ですね。対応までしばらくお待ちください</body></html>");
	} elseif ( preg_match( "/SoftBank/", $ua)){
		return $this->renderText("<html><body>SoftBankの携帯ですね。対応までしばらくお待ちください</body></html>");
	} elseif  (preg_match( "/iPod/", $ua)){
		$this->user_agent = "iPod";
		return sfView::SUCCESS;
	} elseif ( preg_match( "/PSP/", $ua)){
		$this->user_agent ="PSP";
		return sfView::SUCCESS;
	} else {
		$this->user_agent ="PC";
		return sfView::SUCCESS;
	}
  }

/var/www/podtv/apps/frontend/templates/layout.php

                あなたがアクセスしている端末は<br />
                <?php echo $user_agent; ?><br />
                <?php
                  echo 'referer : <br />';
                  print_r( $sf_request->getReferer());
                ?>

UAとか OSとか、総合的に判定してくれるプラグインとか、どこかにあるのでしょうか?
これをアクションじゃなくて、フィルターに仕込んでやれば、もっとちゃんと使えそうです。