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リクエストによって設定されない可能性はありますか?
はい、可能です。これはクライアントによって送信された(または送信されなかった)HTTPヘッダーであり、信頼しないでください。 PHPマニュアルから:
User-Agentのコンテンツ:現在のリクエストのヘッダー(存在する場合)
したがって、正しいコードは次のようになります。
private function ipad_request() {
return isset($_SERVER['HTTP_USER_AGENT']) && strstr($_SERVER['HTTP_USER_AGENT'], 'iPad');
}
はい。どのブラウザまたはユーザーエージェントも、_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;
}
_
はい、可能ですが、通常のリクエストでは発生しません。
すべてのブラウザはリクエストでブラウザ文字列を送信するため、ブラウザ文字列なしで到着するリクエストは他のプログラムから送信されます。すべての正常に動作するボットでさえブラウザ文字列を送信するため、検索エンジンに表示されないことを心配する必要もありません。
PHPのドキュメントによると:
'HTTP_USER_AGENT' User-Agentの内容:現在のリクエストのヘッダー存在する場合。
(関連部分はイタリック体で示されています)したがって、常に設定されているとは限らないように見えます。
HTTP_USER_AGENTが定義されていない例は、ハンドラーをページの1つに設定したサイトのGoDaddyの404ページハンドラーからのリクエストの場合です。