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を探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6で、長い時間かかる処理...
-
C言語のflagの使い方が分かりま...
-
UWSC SLCTBOXもしくはSELECTに...
-
初回起動のみ判別したい
-
回数を指定しないで空白行まで...
-
JSONで文字列が長い時
-
Application.ScreenUpdating = ...
-
シェルスクリプトで、空白(ス...
-
セレクトメニューで2つの項目...
-
[python] 文字列を変数名として...
-
実行時エラー 3020の対策
-
メモリをアドレスを直接指定し...
-
複数列を持ったリストボックス...
-
16進の10進変換について
-
セレクトボックスのselected属...
-
<SELECT>タグの折り返し
-
VBAでPDFのコピーとリネームを...
-
セレクトボックスの「選択して...
-
PerlでXMLを解析して出力する。
-
optionのselectedは更新時は効...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6で、長い時間かかる処理...
-
実行中の変数の中身をイミディ...
-
C言語のflagの使い方が分かりま...
-
初回起動のみ判別したい
-
SetDlgItemInt( ) c++
-
処理終了後、他のページへジャ...
-
arduino の割り込み処理について
-
スカラー変数に処理を入れる
-
回数を指定しないで空白行まで...
-
VBAのCallステートメントについて
-
UWSC SLCTBOXもしくはSELECTに...
-
Perlでプロンプトを作成する方...
-
問題作成のWebアプリの作り方を...
-
プログラミング、VB.NET(初歩です)
-
リファラのないカウントを防止
-
c言語のプログラミングの問題で...
-
内部処理中にNow Loadingみたい...
-
JSONで文字列が長い時
-
Application.ScreenUpdating = ...
-
formで特定のinputを送信しない...
おすすめ情報