CGI-BBS > アクセスカウンタ > その他 > アクセス解析の改造でOperaなどのブラウザ名を表示したい。


カレッヂ
カレッヂ


質問者 がおがお  投稿日 3/2(日) 16:51:10
log.cgiを改造して,HTTP_USER_AGENTのところで,Operaなどを拾う
要にしたいのですが,
if ($HTTP_USER_AGENT =~ /(.+)\/(\d)\..*compatible\; MSIE (\d)\./) {
	$HTTP_USER_AGENT ="MSIE/$3 of $1/$2 compatible";
}
elsif ($HTTP_USER_AGENT =~ /Mozilla\/(\d)\./) {
	$HTTP_USER_AGENT ="Mozilla/$1";
}
に
elsif ($HTTP_USER_AGENT =~ /Opera/(\d)\./) {
	$HTTP_USER_AGENT ="Opera/$1";
}
を加えたのですが,認識がうまくいきません.
良い方法を教えてください.

プロバイダ参照:http://www.sakura.ad.jp/
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:Mifes
FTPソフト:FFFTP
サーバ移転:していない
改造:している
CGI習熟度:middle

回答者 しあわせのツボ  [削除]  投稿日 3/2(日) 19:10:16
「うまくいかない」とはどのような状況ですか?
エラーになって動作しないのか、意図しない動作になってしまうのか、
動作はしているが変更が反映されないのか、など様々な状況が考えられ、
それによって答えも変わります。
質問する際は、期待する結果と現在との違いをできるだけ詳しく書くと
的確な回答がより素早くつくようになります。

まあ今回は見当がついたので。
現在あるブラウザの多くはMozilla/4.0で始まるUSER_AGENTを返します。
なのでそれより先に判定しないといけません。
質問者 がおがお  [削除]  投稿日 3/3(月) 13:17:33
しあわせのツボさん,即レスありがとうございます.
また,説明不足な点をお詫びいたします.

仰るとおりで,Operaは
Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows ME) Opera 7.02 [ja]
を返します.ですので,if文の先頭に以下の様に持っていったのですが,
if ($HTTP_USER_AGENT =~ /Opera/(\d)\./) {
	$HTTP_USER_AGENT ="Opera/$1";
}
elsif ($HTTP_USER_AGENT =~ /(.+)\/(\d)\..*compatible\; MSIE (\d)\./) {
	$HTTP_USER_AGENT ="MSIE/$3 of $1/$2 compatible";
}
elsif ($HTTP_USER_AGENT =~ /Mozilla\/(\d)\./) {
	$HTTP_USER_AGENT ="Mozilla/$1";
}
動作しませんでした.そこで,昨日の命令の順序にしたのですが,
やはりIE/5として判断されてしまいます.
質問者 がおがお  [削除]  投稿日 3/3(月) 14:02:49
思考錯誤の末
if ($HTTP_USER_AGENT =~ /Opera (\d)\./) {

	$HTTP_USER_AGENT ="Opera/$1";
}
elsif ($HTTP_USER_AGENT =~ /(.+)\/(\d)\..*compatible\; MSIE (\d)\./) {

	$HTTP_USER_AGENT ="MSIE/$3 of $1/$2 compatible";
}
elsif ($HTTP_USER_AGENT =~ /Mozilla\/(\d)\./) {

	$HTTP_USER_AGENT ="Mozilla/$1";
}
としたらOperaが認識できました.
ありがとうございます.
回答者 しあわせのツボ  [削除]  投稿日 3/3(月) 14:05:56
まず
> if ($HTTP_USER_AGENT =~ /Opera/(\d)\./) {
これ、本当に動作しましたか?
if ($HTTP_USER_AGENT =~ /Opera\/(\d)\./) {
としなければエラーが出ると思うのですが。
更に、Operaは
> Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows ME) Opera 7.02 [ja]
と返しているのですから
if ($HTTP_USER_AGENT =~ /Opera (\d)\./) {
でないと認識しませんよね。
以上を確認してください。
質問者 がおがお  [削除]  投稿日 3/3(月) 14:16:28
しあわせのツボさん,ありがとうございました.
正常に,思ったように動作しました.
これからもよろしくお願いします.

このページは終了したので返信(回答)は書きこめません
 


Web裏技