26

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 リクエストで設定されない可能性はありますか?

4

5 に答える 5

28

はい、可能です。これはクライアントによって送信された (または送信されていない) HTTP ヘッダーであり、それに依存するべきではありません。PHPマニュアルから:

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

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

private function ipad_request() {
    return isset($_SERVER['HTTP_USER_AGENT']) && strstr($_SERVER['HTTP_USER_AGENT'], 'iPad');
}
于 2011-06-24T08:45:36.230 に答える
8

はい。どのブラウザーまたはユーザー エージェントも、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;
}
于 2011-06-24T08:46:31.233 に答える
4

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

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

于 2011-06-24T08:50:29.053 に答える
2

PHPドキュメントには次のように書かれています:

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

(関連する部分はイタリック体で表示) そのため、常に設定されているとは限らないようです。

于 2011-06-24T08:47:50.437 に答える