web-dev-qa-db-ja.com

$ _SERVER ['HTTP_USER_AGENT']が設定されていない可能性はありますか?

Webサイトのerror_logを調べたところ、数回ログに記録されたエラーの1つは次のとおりです。

[21-Jun-2011 12:24:03] PHP Notice: Undefined index: HTTP_USER_AGENT in /home/ukevents/public_html/lib/toro.php on line 130

toro.phpのこれに関連する行は次のとおりです。

private function ipad_request() {
    return strstr($_SERVER['HTTP_USER_AGENT'], 'iPad');
}

$_SERVER['HTTP_USER_AGENT']がHTTPリクエストによって設定されない可能性はありますか?

25
Martin Bean

はい、可能です。これはクライアントによって送信された(または送信されなかった)HTTPヘッダーであり、信頼しないでください。 PHPマニュアルから:

User-Agentのコンテンツ:現在のリクエストのヘッダー(存在する場合)

したがって、正しいコードは次のようになります。

private function ipad_request() {
    return isset($_SERVER['HTTP_USER_AGENT']) && strstr($_SERVER['HTTP_USER_AGENT'], 'iPad');
}
27

はい。どのブラウザまたはユーザーエージェントも、_User-Agent_ヘッダーを送信しないことを選択できます。そのヘッダーを送信しない場合、_$_SERVER['HTTP_USER_AGENT']_は設定されません。

isset() を使用して、_$_SERVER['HTTP_USER_AGENT']_が設定されていることを確認します。

_private function ipad_request() {
  if(!isset($_SERVER['HTTP_USER_AGENT'])) return false;

  return strstr($_SERVER['HTTP_USER_AGENT'], 'iPad') !== false;
}
_
8
Andrew Moore

はい、可能ですが、通常のリクエストでは発生しません。

すべてのブラウザはリクエストでブラウザ文字列を送信するため、ブラウザ文字列なしで到着するリクエストは他のプログラムから送信されます。すべての正常に動作するボットでさえブラウザ文字列を送信するため、検索エンジンに表示されないことを心配する必要もありません。

4
Guffa

PHPのドキュメントによると:

'HTTP_USER_AGENT' User-Agentの内容:現在のリクエストのヘッダー存在する場合

(関連部分はイタリック体で示されています)したがって、常に設定されているとは限らないように見えます。

2
ChrisA

HTTP_USER_AGENTが定義されていない例は、ハンドラーをページの1つに設定したサイトのGoDaddyの404ページハンドラーからのリクエストの場合です。

1
Anono Mouser