このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0079

CI_User_agent

 「CI_User_agent」ライブラリクラスは、クライアントからの以下のリクエストHTTPヘッダを元に
クライアント情報を解析する機能を提供します。

    • User-Agent:
    • Accept-Language:
    • Accept-Charset:
    • Referer:

 これらのHTTPヘッダは必ず付加されているとは限りません。また、HTTPヘッダは容易にカスタマイズできるため 100%信頼できるデータの取得はできないことになります。

CI_User_agentのロード

 「CI_Loader」クラスの「library()」メソッドで 「CI_User_agent」クラスをロードします。

 他のライブラリクラスと違って、インスタンス変数名はクラス名から「CI_」プリフィックスを除いた
「 $this->user_agent 」ではなく、「 $this->agent 」となりますので注意してください。

User-Agent 情報

 リクエストHTTPヘッダの「User-Agent」からクライアント情報を解析します。
 User-Agentからのクライアント情報解析には「 application/config/user_agent.php 」辞書ファイルが利用されます。

 「 application/config/user_agent.php 」ファイルは、以下の4つの連想配列が定義されています。

    • $platforms : クライアントの OS 判別情報
    • $browsers : クライアントのブラウザ判別情報
    • $mobiles : クライアントの携帯端末情報
    • $robots : 検索エンジン情報

 連想配列の添え字(インデックスキー)の文字列が、「User-Agent」の値との比較に使われます。

is_browser($key = NULL) 一番上に戻る

 引数を指定しない場合は、クライアントがブラウザからアクセスされているか否か判定しTRUE
または、FALSEで返します。
 判例は、「 application/config/user_agent.php 」に定義されている「 $browsers 」連想配列と比較して行われているため 未定義のブラウザからアクセスされた場合は、FALSEとなってしまいます。
 「 $browsers 」連想配列に未定義のブラウザを追加することで正しく判定されるようになります。

    $this->local->library('user_agent');

    if ( $this->agent->is_browser() ) {
        // ブラウザアクセスです。
    } else {
        // ブラウザアクセスではありません。
    }

 また、引数に「 application/config/user_agent.php 」に定義されている「 $browsers 」連想配列の
添え字(インデックスキー)のいずれかを指定することで、クライアントが引数で指定したブラウザか否か
判定します。

    $this->local->library('user_agent');

    if ( $this->agent->is_browser('Firefox') ) {
        // Firefox ブラウザです。
    } else {
        // Firefox ブラウザではありません。
    }

is_robot($key = NULL) 一番上に戻る

 引数を指定しない場合は、クライアントがクローラ(ロボット)からアクセスされているか否か判定しTRUE
または、FALSEで返します。
 判例は、「 application/config/user_agent.php 」に定義されている「 $robots 」連想配列と比較して行われているため 未定義のクローラ(ロボット)からアクセスされた場合は、FALSEとなってしまいます。
 「 $robots 」連想配列に未定義のクローラ(ロボット)を追加することで正しく判定されるようになります。

    $this->local->library('user_agent');

    if ( $this->agent->is_robot() ) {
        // ロボットアクセスです。
    } else {
        // ロボットアクセスではありません。
    }

 また、引数に「 application/config/user_agent.php 」に定義されている「 $robots 」連想配列の
添え字(インデックスキー)のいずれかを指定することで、クライアントが引数で指定したクローラ(ロボット)か否か判定します。

    $this->local->library('user_agent');

    if ( $this->agent->is_robot('googlebot') ) {
        // Googleクローラです。
    } else {
        // Googleクローラではありません。
    }

is_mobile($key = NULL) 一番上に戻る

 引数を指定しない場合は、クライアントがモバイル端末からアクセスされているか否か判定しTRUE
または、FALSEで返します。
 判例は、「 application/config/user_agent.php 」に定義されている「 $mobiles 」連想配列と比較して行われているため 未定義のモバイル端末からアクセスされた場合は、FALSEとなってしまいます。
 「 $robots 」連想配列に未定義のモバイル端末を追加することで正しく判定されるようになります。

    $this->local->library('user_agent');

    if ( $this->agent->is_mobile() ) {
        // モバイル端末アクセスです。
    } else {
        // モバイル端末アクセスではありません。
    }

 また、引数に「 application/config/user_agent.php 」に定義されている「 $mobiles 」連想配列の
添え字(インデックスキー)のいずれかを指定することで、クライアントが引数で指定したモバイル端末か否か判定します。

    $this->local->library('user_agent');

    if ( $this->agent->is_mobile('iphone') ) {
        // iPhoneからのアクセスです。
    } else {
        // iPhoneからのアクセスではありません。
    }

agent_string() 一番上に戻る

 リクエストHTTPヘッダ「 User-Agent: 」の値を返します。

    $this->local->library('user_agent');

    echo $this->agent->agent_string();
    // CCBot/2.0 (https://commoncrawl.org/faq/)

platform() 一番上に戻る

 クライアントのOSを表わす文字列を返します。
リクエストHTTPヘッダの「User-Agent:」の値が、「application/config/user_agent.php」の「$platforms」連想配列の 添え字とマッチするその値が返ります。
 「$platforms」連想配列に定義されていないOSは、文字列「Unknown Platform」が返されます。

    $this->local->library('user_agent');

    echo $this->agent->platform();
    // Unknown Platform

 CodeIgniter 2.1.0 までの「application/config/user_agent.php」の「$platforms」連想配列には、 「Windows 7」が定義されていません。
 「Windows 7」を定義するには「$platforms」連想配列に以下を追加定義します。

    • application/config/user_agent.php
    $platforms = array (
        'windows nt 6.1'  =>  'Windows 7',

 Androidにマッチさせるには、以下のデータを「$platforms」連想配列(linuxより前)に追加定義します。

    • application/config/user_agent.php
    $platforms = array (
        'android 4.0' => 'Android 4.0',
        'android 3.2' => 'Android 3.2',
        'android 3.1' => 'Android 3.1',
        'android 3.0' => 'Android 3.0',
        'android 2.3' => 'Android 2.3',
        'android 2.2' => 'Android 2.2',
        'android 2.1' => 'Android 2.1',
        'android' => 'Android'

browser() 一番上に戻る

 クライアントのブラウザを表わす文字列を返します。
リクエストHTTPヘッダの「User-Agent:」の値が、「application/config/user_agent.php」の「$browsers」連想配列の 添え字とマッチするその値が返ります。
 「$browsers」連想配列に定義されていないブラウザは、空文字列が返されます。

    $this->local->library('user_agent');

    echo $this->agent->browser();
    //

version() 一番上に戻る

 クライアントのブラウザバージョンを表わす文字列を返します。
リクエストHTTPヘッダの「User-Agent:」の値が、「application/config/user_agent.php」の「$browsers」連想配列の 添え字とマッチするブラウザのバージョン番号を「User-Agent:」の値から取得して返します。  「$browsers」連想配列に定義されていないブラウザは、空文字列が返されます。

    $this->local->library('user_agent');

    echo $this->agent->version();
    //

robot() 一番上に戻る

 クローラ(ロボット)を表わす文字列を返します。
リクエストHTTPヘッダの「User-Agent:」の値が、「application/config/user_agent.php」の「$robots」連想配列の 添え字とマッチするその値が返ります。
 マッチしない場合は、空文字列が返ります。

    $this->local->library('user_agent');

    echo $this->agent->robot();
    //

mobile() 一番上に戻る

 モバイル端末を表わす文字列を返します。
リクエストHTTPヘッダの「User-Agent:」の値が、「application/config/user_agent.php」の「$mobiles」連想配列の 添え字とマッチするその値が返ります。
 マッチしない場合は、空文字列が返ります。

    $this->local->library('user_agent');

    echo $this->agent->mobile();
    //

Accept-Language 情報

 リクエストHTTPヘッダの「Accept-Language」からクライアント情報を解析します。

languages() 一番上に戻る

 クライアントが求める言語タグを配列で返します。
 リクエストHTTPヘッダ「Accepot-Language:」が定義されていない場合は「Undefined」のみの配列が返されす。
言語タグは、「ISO 639-2」の2桁の言語コード、及び、言語コードに「ISO 3166-1 alpha-2」の2桁の国コード を「-(ハイフン)」で繋げた文字列です。


accept_lang($lang = 'en') 一番上に戻る

 引数に指定した言語タグがクライアントの求める言語とマッチする場合は、TRUEを返します。

    $this->local->library('user_agent');

    if ( $this->agent->accept_lang('ja') ) {
        // Accepot-Language: に'ja'が含まれています。
    } else {
        // Accepot-Language: に'ja'が含まれていません。
    }

Accept-Charset 情報

 リクエストHTTPヘッダの「Accept-Charset」からクライアント情報を解析します。

charsets() 一番上に戻る

 クライアントが求める文字コードを配列で返します。
 リクエストHTTPヘッダ「Accepot-Charset:」が定義されていない場合は「Undefined」のみの配列が返されす。

    $this->local->library('user_agent');

    var_dump( $this->agent->charsets() );
    // array ( 0 => 'Undefined', )

accept_charset($charset = 'utf-8') 一番上に戻る

 引数に指定した文字コードがクライアントの求める文字コードとマッチする場合は、TRUEを返します。

    $this->local->library('user_agent');

    if ( $this->agent->accept_charset('utf-8') ) {
        // Accepot-Charset: に'utf-8'が含まれています。
    } else {
        // Accepot-Charset: に'utf-8'が含まれていません。
    }

Referer 情報

 リクエストHTTPヘッダの「Referer」からクライアント情報を解析します。

is_referral() 一番上に戻る

 リクエストHTTPヘッダに「Referer:」がある場合は、TRUEを返します。

    $this->local->library('user_agent');

    if ( $this->agent->is_referral() ) {
        // Referer: があります。
    } else {
        // Referer: がありません。
    }

referrer() 一番上に戻る

 リクエストHTTPヘッダの「Referer:」の値を返します。
 リクエストHTTPヘッダに「Referer:」が含まれていない場合は、空文字列が返されます。

    $this->local->library('user_agent');

    echo $this->agent->referrer();
    // http://www.ci-guide.info/practical/library/

 HTTP の仕様では 「 Referer 」ですが、正しい英語のスペルは「 referrer 」です。
 なので、本メソッドの綴りは「 reffer() 」となっている?