サーバサイドでOS・ブラウザ判定

2007.12.13 / php

「そんなのできたらOS毎に分けたHTMLを出力するとき、無駄なdocument.write()だらけにならずに便利なのに、、、」と思ったのですが、よくよく考えたらUserAgent見たらできそう。と、いうわけでPHPで書いてみました。

  <?php
  $ua = $_SERVER['HTTP_USER_AGENT'];
  if(eregi('Windows', $ua)){
      echo('Windows!');
  } else {
      echo('Not Windows!');
  }
  ?>
  

超簡単。UA送ってくれてたらブラウザ判定もいけます。

もちろん「UA偽装されたら、、」とかな話もあるけど、JSに頼らず"そこそこの信頼度“で知れることも大事かな、と。あと、サーバサイドで判定していたらSmartyなんかのテンプレートシステムでコード分けがものすごくシンプルになります。

  {if $os=='win'}
  <h1>For Windows User</h1>
  {/if}
  

こんな感じでtplファイルに書けます。これをクライアントサイドでやると

  if(os=='win'){
   document.write('<h1>For Windows User</h1>');
  }
  

こんな感じですかね。クライアントサイドでの判別方法の実装側の問題点として、ソース内のHTMLの実体が文字列ばっかりになっちゃって何だか分からなくなること多いこと。タグが入れ子になってきたらよくミスっちゃうことも多いはず。と、いうわけで、ずっとクライアントサイドに振るべきだと思われてた仕事も、サーバ側に振れる仕事は振っちゃってもいいのかな、と思いました。