
No.4ベストアンサー
- 回答日時:
以下の、
> リファラのない場合のみアクセスを防止するように改造
とおっしゃる意味が、
●「リファラのない」アクセスのみをカウント防止(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; }
No.3
- 回答日時:
あ、処理が逆になってましたねw
しかも、質問のタイトルをよく読んでませんでした。
酔っ払いイクナイ。
で、本題。
@nocount_id = (1,5,10); # アクセスを防止するIDのリスト
$nocount_flag = 0;
unless($ENV{'HTTP_REFERER'){
foreach $linkid(@nocount_id) {
if ($linkid == $FORM{id}) {
$nocount_flag = 1;
last;
}
}
}
No.2
- 回答日時:
それでは逆ですね。
『リファラの“ある”アクセスの場合に~』という条件式になってしまっています。
なので、リファラが“ない”場合には else の方が実行されます。
if ($ENV{'HTTP_REFERER'}) {
リファラの“ある”アクセスの場合の処理
} else {
リファラの“ない”アクセスの場合の処理
}
上記はリファラの“ある”場合と“ない”場合の両方ともを分岐して処理していますが、リファラの“ある”場合だけでいいなら、else 以後は不要です。
リファラの“ない”場合だけでいいなら、条件式を逆の意味に変更します。
式の前に「not」つまり「否定」を意味する「!」を付けると逆の条件、すなわち『リファラの“ない”アクセスの場合に~』という意味になります(notと書いても良い)。
↓ここに「!」を入れる
if (!$ENV{'HTTP_REFERER'}) {
リファラの“ない”アクセスの場合の処理
}
あるいは、
unless ($ENV{'HTTP_REFERER'}) {
リファラの“ない”アクセスの場合の処理
}
※両方の処理が必要なら if 文を使います。
ご回答ありがとうございます。大変勉強になりました。アドバイス頂いた内容を元に、改造した内容を、mflowさんへのお礼に書込みしました。このような書き方でよろしかったでしょうか。宜しくお願いいたします。
No.1
- 回答日時:
それであってますよ。
けど、elseでつないでしまうとソースが煩雑になりがちなので以下のようにしてみたらどうでしょうか。
unless($ENV{'HTTP_REFERER'}){
print "Content-type: text/html\n\n";
print "リファラがない場合の表示";
exit;
}
# 通常の処理を書く
この回答への補足
ちなみに、
意味もわからず、$nocount_flag = 0;を1に変更してみましたが、4行目の
if ($linkid == $FORM{id}) { $nocount_flag = 1; last; }
の数値「1」はこのままでいいのでしょうか。
わからないことだらけで恐縮です。
ご回答ありがとうございます。大変勉強になりました。アドバイス頂いた内容を元に、改造してみました。
@nocount_id = (1,5,10); # アクセスを防止するIDのリスト
$nocount_flag = 0;
foreach $linkid(@nocount_id) {
if ($linkid == $FORM{id}) { $nocount_flag = 1; last; }
}
上記スクリプトで指定されたIDのアクセスを防止できるのですが、リファラのない場合のみアクセスを防止するように改造しようと考えました。以下のように変更してみましたが、よろしかったでしょうか。お手数ですが、宜しくお願いいたします。
@nocount_id = (1,5,10); # リファラのないアクセスを防止するIDのリスト
if(!$ENV{'HTTP_REFERER'}){
$nocount_flag = 0;
} else {
$nocount_flag = 1;
}
foreach $linkid(@nocount_id) {
if ($linkid == $FORM{id}) { $nocount_flag = 1; last; }
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- LINE LINEの送信取消し後に訂正再送すると通知センター表示はどうなりますか? 3 2023/03/04 00:08
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- JavaScript JavaScript?jQuery?で書き方を教えてください。 初心者です。 AAAという要素をステ 2 2023/08/04 22:09
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- WordPress(ワードプレス) WordpressでYouTubeの埋め込みができない。 1 2022/10/26 01:08
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- 教えて!goo 投稿 5 2022/06/23 09:58
- JavaScript 読み込んだQRコードをフォームに受け渡したい 1 2023/05/18 11:18
- JavaScript 指定時間になったら、WEBサイトの更新を自動で行うには…? 3 2022/04/28 22:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlの基礎中の基礎を教え...
-
VB6で、長い時間かかる処理...
-
{ ; }とは、どういう意味?
-
実行中の変数の中身をイミディ...
-
ページングで「前の○件」の方法
-
C言語のプログラミング
-
何がいけないのでしょうか?
-
ソートを利用して文字を昇順で...
-
お勧めのデバッグツールは?
-
__DATA__ が上書きされてしまう
-
Perl・正規表現が分かりません
-
EUCで保存されたスクリプトにて...
-
Pythonのプログラミング(Tkinter)
-
Application.ScreenUpdating = ...
-
文字の横にプルダウンを表示さ...
-
@×× = $q->param('**'); の書...
-
ファイルに書き込む
-
perlの型と8進数、10進数
-
JSONで文字列が長い時
-
FindFirst を複数条件で検索
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6で、長い時間かかる処理...
-
実行中の変数の中身をイミディ...
-
初回起動のみ判別したい
-
C言語のflagの使い方が分かりま...
-
処理終了後、他のページへジャ...
-
C#でDataFridViewの行をすべて...
-
回数を指定しないで空白行まで...
-
SetDlgItemInt( ) c++
-
perl:ループのカウンタ変数の値...
-
問題作成のWebアプリの作り方を...
-
UWSC SLCTBOXもしくはSELECTに...
-
STDINによるキーボードからの入...
-
Pythonでこのプログラミングを...
-
VBAのCallステートメントについて
-
Valueの値によってActionの送信...
-
フラグをたてる、、の意味を教...
-
C言語のプログラミング
-
arduino の割り込み処理について
-
教えてください。 画像処理のプ...
-
スカラー変数に処理を入れる
おすすめ情報