0

PHP ページを要求しているユーザー エージェントを確認するための信頼できる方法を探しています。私も知ってget_browserいます$_SERVER['HTTP_USER_AGENT']が、どちらも信頼できるようには見えません。

ではget_browser、ユーザー エージェントを定義する ini ファイルに設定された browscap PHP ディレクティブが必要です。PHP はhttp://browsers.garykeith.com/downloads.aspを推奨しているので、LAMP 用に指定された「完全な」ものをインストールしました。

通常のブラウザの組み合わせでうまく機能get_browserしますが、私は特にMS Officeからのリクエストを扱っています. その場合、OS X Excel の場合と同様に、何も返さないようです (注:$_SERVER['HTTP_USER_AGENT']は最初の行で、その後に の配列出力が続きますget_browser):

Mozilla/5.0 (Macintosh; Intel Mac OS X) Excel/14.0.0

Array
(
    [browser_name_regex] =     ^.*$
    [browser_name_pattern] =     *
    [browser] =     Default Browser
    [version] =     0
    [majorver] =     0
    [minorver] =     0
    [platform] =     unknown
    [alpha] =     
    [beta] =     
    [win16] =     
    [win32] =     
    [win64] =     
    [frames] =     
    [iframes] =     
    [tables] =     
    [cookies] =     
    [backgroundsounds] =     
    [javascript] =     
    [vbscript] =     
    [javaapplets] =     
    [activexcontrols] =     
    [isbanned] =     
    [ismobiledevice] =     
    [issyndicationreader] =     
    [crawler] =     
    [cssversion] =     0
    [aolversion] =     0
)

さらに悪いことに、一部の Windows ケースでは Office について言及していないようです。

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)

Array
(
    [browser_name_regex] =     ^mozilla/4\.0 (compatible; msie 7\.0.*; .*windows nt 6\.1.*).*$
    [browser_name_pattern] =     Mozilla/4.0 (compatible; MSIE 7.0*; *Windows NT 6.1*)*
    [parent] =     IE 7.0
    [platform] =     Win7
    [browser] =     IE
    [version] =     7.0
    [majorver] =     7
    [win32] =     1
    [frames] =     1
    [iframes] =     1
    [tables] =     1
    [cookies] =     1
    [backgroundsounds] =     1
    [javascript] =     1
    [vbscript] =     1
    [javaapplets] =     1
    [activexcontrols] =     1
    [cssversion] =     2
    [minorver] =     0
    [alpha] =     
    [beta] =     
    [win16] =     
    [win64] =     
    [isbanned] =     
    [ismobiledevice] =     
    [issyndicationreader] =     
    [crawler] =     
    [aolversion] =     0
)

これらの例から判断すると、ここでは実際には信頼性が低く、少なくとも Office 要求の大量の .NET 参照を吐き出すget_browserより多くの情報を収集できるようです。$_SERVER['HTTP_USER_AGENT']

それを念頭に置いて、誰かが壊れるよく書かれた関数を私に指摘でき$_SERVER['HTTP_USER_AGENT']ますか? 私が実行したすべての検索では、代わりに使用する推奨事項が表示されますget_browser

get_browserWindows ベースのインストールから MS Office の参照がまったく失敗するように見える理由についての考えも大歓迎です...さまざまな Office アプリのリンクをクリックするさまざまなユーザーの 10 のテストを次に示します ($_SERVER最初にget_browser結果): http://pastebin.com/ 5m2zWMrt - OS X からの最初の 3 つの例の後にオフィスの兆候がないことに注意してください。MSDN で関連する質問もしました: http://social.msdn.microsoft.com/Forums/en-US/officegeneral/thread /8ad594cd-0dfe-4110-8ffc-4d0caee4c29f

要約すると$_SERVER['HTTP_USER_AGENT']、理想的には、要求が MS Office から来ているかどうかを判断できる . 長期的にはget_browser、Office データを含む最新の ini があるにもかかわらず、MS Office で動作しない理由を突き止める必要があります。

4

1 に答える 1

0

提供されたユーザー エージェントは、控えめに言っても信頼性が低いため、サーバーが通信しているブラウザー/アプリを正しく推測することは不可能です。最もよく使用されるブラウザ向けのユーザー エージェント パーサーを作成するのは非常に簡単ですが、それ以外についてはどうでしょうか。たとえば、MS Office?

いいえ、サーバー側からブラウザを推測しようとしないでください。それはあなたがやっていることだから、推測して - 知らずに。

とにかく、ブラウザのメーカーとモデルを知る必要があるのはなぜですか? ユーザーが使用しているブラウザーに合わせてページを調整する必要がある場合は、代わりにCSS 条件付きコメントを使用するか、JavaScript で信頼できる機能をテストする必要があります。創造性を発揮し、それ以外のことはすべて行ってください。ただし、ブラウザーを推測しようとしないでください。

于 2011-11-14T23:54:30.973 に答える