PHPでケータイのFlash対応・非対応を判定できる関数を作ってみました
    このエントリをはてなブックマークに登録

ケータイコンテンツでよくある処理に、Flash対応端末であればFlashを、非対応端末であれば画像を出すという処理があります。

今までは、定義ファイルやデータベース内にデータを持って、対応・非対応を判定していたのですが、設置等が面倒ですし、動作も遅いです。
今後発売されるほぼ全ての機種は、Flash対応端末となりそうな感じなので、判定処理をPHPで関数化してみました。

ご利用上の注意事項です。

  • 2008年3月18日時点での端末リストでテストしています
  • 今後はFlash非対応端末が出ないということ、端末の命名規則が大きく変わらないことを仮定しています
  • もしFlash非対応端末が出たり、命名規則を外れた端末が出た場合は、適宜プログラムを修正してください。

ソフトバンクの公式サイトにFlashへの対応状況が載っておらずよくわからないので、こちら [neu.co.jp]のページを参考にしてみました。

 

if (isEnableFlash($_SERVER['HTTP_USER_AGENT'])) {
    echo 'Flash対応';
} else {
    echo 'Flash非対応';
}

/**
 * Flash対応判定
 */
function isEnableFlash($agent)
{
    if (preg_match('/^J\\-PHONE|MOT\\-/', $agent)) {
        // J-PHONE, Vodafoneの一部
        return false;
    } elseif (preg_match('/^Vodafone/', $agent)) {
        // Vodafone
        if (preg_match('/SH|SHf|SE\\//', $agent)) {
            return true;
        } else {
            return false;
        }
    } elseif (preg_match('/^SoftBank/', $agent)) {
        // SoftBank
        if (preg_match('/\\/70[0-9]|805SC/', $agent)) {
            return false;
        } else {
            return true;
        }
    } elseif (preg_match('/^DoCoMo\\/1\\.0\\//', $agent)) {
        // DoCoMo mova
        if (preg_match('/[A-Z]{1,2}50[56]i/', $agent)) {
            // 505i, 506i
            return true;
        } else {
            return false;
        }
    } elseif (preg_match('/^DoCoMo\\/2\\.0\\ /', $agent)) {
        // DoCoMo FOMA
        if (preg_match('/[NP]200[12]|[FN]2051|210[12]V|N2701|NM850iG|
F880iES|N600i|L60[0-2]i/', $agent)) {  ※
            // FOMAの一部非対応機種
            return false;
        } else {
            return true;
        }
    } elseif (preg_match('/UP\\.Browser/', $agent)) {
        // au
        if(preg_match('/^KDDI/', $agent)) {
            // au(HTML-OK)
            if (preg_match('/KDDI\\-ST2[4-9]|CA2[78]|KC2[7-9]|SA29/'
, $agent)) {  ※
                return true;
            } elseif (preg_match('/KDDI\\-[A-Z]{2}2[1-9]|HI3[12]|
KC[3U]1/', $agent)) {  ※
                return false;
            } else {
                return true;
            }
        } else {
            // au(HDML-Only)
            return false;
        }
    } else {
        // その他PC等
        return true;
    }
}

※表示の関係で折り返している部分があります。実際には1行で記述してください。

本サイトのスペック一覧リストを通してテストしましたのでおそらく大丈夫だと思いますが、もし間違い等がありましたら、ぜひご指摘をお願いします。

 

関連:


 

最近の記事







7 Responses to “PHPでケータイのFlash対応・非対応を判定できる関数を作ってみました”

  1. auの機種判、if(substr($_SERVER[“HTTP_X_UP_DEVCAP_MULTIMEDIA”],12,1)){
    return true;
    }else{
    return false;
    }
    でよくないですか?

    で、win以外非対応にしたいなら
    HTTP_X_UP_DEVCAP_MAX_PDUで切るほうが、楽な気がします。

  2. chevさん
    コメントありがとうございます。
    おっしゃるとおりですね。そちらの方が正確で遙かにシンプルです。
    ユーザエージェントにこだわり過ぎたかもしれません。

  3. […] ke-tai.org > Blog Archive > PHPでケータイのFlash対応・非対応を判定できる関数を作ってみました ケータイコンテンツでよくある処理に、Flash対応端末であればFlashを、非対応端末であれば […]

  4. 大変参考になり助かりました。

  5. 金ミンソク Says:

    本当にどうもありがとうございます。大きい助けを借りました。
    Thank you very much.It saveed lots of time for me.

    日本語がまだ下手です。申し訳ありません。

    一つ申し上げたいことは
    フラッシュライト 2.0以上はさまざまな機能を具現することができるから
    フラッシュライト 2.0以上の対応機種と非対応で区分することも良さそうです。
    どうもありがとうございます。

  6. […] PHPでケータイのFlash対応・非対応を判定できる関数を作ってみました | ke-tai.org […]

  7. 端末により、Flash対応/未対応を判別できる方法が無いか、
    色々調べているうちにたどり着きました。
    本当に助かりました。ありがとうございます!!!

コメントを書く