以下の、
> リファラのない場合のみアクセスを防止するように改造
とおっしゃる意味が、
●「リファラのない」アクセスのみをカウント防止(IDに関係なく)
という意味なら、
unless ($ENV{'HTTP_REFERER'}) { $nocount_flag = 1; }
の1行だけで良いと思います。
●「リファラのない」かつ「リストに含まれるID」のアクセスをカウント防止
(両方ともYESの場合にカウント防止)
という意味なら、ANo.3さんの方法で良いと思います。
または以下のような書き方でも良いと思います。
$nocount_ids = '^' . join('$|^',(1,5,10)) . '$'; # アクセスを防止するIDのリスト
if (!$ENV{'HTTP_REFERER' && $FORM{id} =~ qr{$nocount_ids}) { $nocount_flag = 1; }
else { $nocount_flag = 0; }
●「リファラのない」アクセスと、「リストに含まれるID」のアクセスの両方をカウント防止
(1つ以上がYESの場合にカウント防止)
という意味なら、
@nocount_id = (1,5,10); # アクセスを防止するIDのリスト
$nocount_flag = 0;
if ($ENV{'HTTP_REFERER'}) {
foreach $linkid(@nocount_id) {
if ($linkid == $FORM{id}) { $nocount_flag = 1; last; }
}
} else {
$nocount_flag = 1;
}
または以下のような書き方でも良いと思います。
$nocount_ids = '^' . join('$|^',(1,5,10)) . '$'; # アクセスを防止するIDのリスト
if (!$ENV{'HTTP_REFERER' || $FORM{id} =~ qr{$nocount_ids}) { $nocount_flag = 1; }
else { $nocount_flag = 0; }
お礼
ご回答ありがとうございました。知識のない私でも理解できるよう、詳しくご説明してくださり大変助かりました。