No.7323 投稿時間:2002年12月26日(Thu) 10:20 投稿者名:うさぎ URL:
AnHTTPDでバーチャルホストごとに異なるアクセス制御(許可、拒否IP)を設定したいのですが、あるホストのアクセス制御を設定すると
他のバーチャルホストが同一設定になってしまいます。
AnHTTPDはホストごとに設定を変えることはできないのでしょうか?
ご存知の方がみえたらご教授ください。
No.7329 投稿時間:2002年12月26日(Thu) 11:09 投稿者名:ハル URL:
> AnHTTPDでバーチャルホストごとに異なるアクセス制御(許可、拒否IP)を設定したいのですが、あるホストのアクセス制御を設定すると
> 他のバーチャルホストが同一設定になってしまいます。
> AnHTTPDはホストごとに設定を変えることはできないのでしょうか?
> ご存知の方がみえたらご教授ください。
できません。
ちなみに、認証も同一になってしまいます。#注意
No.7331 投稿時間:2002年12月26日(Thu) 11:23 投稿者名:OAK URL:
> できません。
> ちなみに、認証も同一になってしまいます。#注意
すべてCGIで組めばできます
No.7336 投稿時間:2002年12月26日(Thu) 12:11 投稿者名:うさぎ URL:
OAKさん、ありがとうございます。
CGIで組む方法について述べてあるHPやテキストを
ご存知でしたら教えてください。
No.7334 投稿時間:2002年12月26日(Thu) 12:04 投稿者名:うさぎ URL:
ハルさん、ありがとうございます。
サーバー側で解決できなければ、
タグでタイトルのような事ができれば解決するのですが・・
そんな事ができるのでしょうか?
No.7344 投稿時間:2002年12月26日(Thu) 14:47 投稿者名:OAK URL:
> ハルさん、ありがとうございます。
> サーバー側で解決できなければ、
> タグでタイトルのような事ができれば解決するのですが・・
> そんな事ができるのでしょうか?
次のようなCGIを組みます。
(1)イメージファイル名を IPアドレスとかドメインで決めます。
(2)Content-type: image/jpeg\n\n を出します
(3)ファイルをオープンしバイナリーで読みSTDOUTに出す。
10行程度で出来ますから練習でやってみては?
No.7362 投稿時間:2002年12月27日(Fri) 04:08 投稿者名:うさぎ URL:
OAKさん、アドバイスありがとうございます。
今まで構文にかかわる部分は避けてきたので、
今回がプログラミング初体験です。アイデアは
1.アクセスした人のIPアドレスを取得
2.IPアドレスを入力するフォームを表示させ
3.入力されたIPアドレスとアクセスした人の
IPアドレスが一致⇒a.jpg、不一致⇒b.jpg
というつもりで以下のものをつくったのですが
常にb.jpgとContent-type: image/jpegという
文字が出てしまいます。どこかいけないのでしょうか?
このCGI名はchange.cgi、
windowsサーバなのでパールのパスはいりません。
$ADDR = $ENV{'REMOTE_ADDR'};
print "Content-type: text/html\n\n";
print "<html><body><form method=post action=change.cgi>
IPアドレス<input name=$IP><input type=submit value=入力>
</form></body></html>\n";
if ($ADDR eq $IP ) {
print "Content-type: image/jpeg\n\n";
print "<html><body><img src=a.jpg></body><html>";}
elsif ($ADDR ne $IP ) {
print "Content-type: image/jpeg\n\n";
print "<html><body><img src=b.jpg></body><html>";}
No.7366 投稿時間:2002年12月27日(Fri) 11:52 投稿者名:OAK URL:
ちょっと違います。
私はイメージをCGIで作るつもりで書きました。
つまりhtmlは
<html><body><img src="img.cgi"></body><html>
とCGIでなく書いて
img.cgi では
$filename= 'b.jpg';
if ($ADDR eq '127.0.0.1' ) { $filename='a.jpg' ;}
print "Content-type: image/jpeg\n\n";
open(FH,"<$filename")
binmode(STDOUT);
binmode(FH);
print <FH>
close(FH);
HTMLはCGIで書かないで、イメージをCGIで書く
サーバーからだとa.jpg 他からは b.jpg になる。と言う意味です
貴方のやり方(HTMLをCGIで書く)ですと、
$IP='127.0.0.1';
$ADDR = $ENV{'REMOTE_ADDR'};
print "Content-type: text/html\n\n";
print "<html><body><form method=post action=change.cgi>
if ($ADDR eq $IP ) {print "<html><body><img src=a.jpg></body><html>";}
els {print "<html><body><img src=b.jpg></body><html>";}
です。
貴方のCGIの中に<input>がありますが、
form でinput された物は$ENV{'QUERY_STRING'};でないと取り出せません
チェックしてませんのでこのまま動くかはわかりません
No.7372 投稿時間:2002年12月27日(Fri) 13:38 投稿者名:ハル URL:
OAKさんこんにちは。亀レスですが、
>すべてCGIで組めばできます
との事ですが、どの様にするのでしょうか?
後学のためにご教授下さい。m(._.)m ペコッ
# SERVER_NAMEでとる方法は、ApacheだとVirtual Hostで指定した
# ドメイン名を返しますが(Linuxで確認、Winは未確認)、
# AnHTTPDだと、PCの名前を返してきます。
No.7400 投稿時間:2002年12月27日(Fri) 20:23 投稿者名:OAK URL:
> OAKさんこんにちは。亀レスですが、
>
> >すべてCGIで組めばできます
>
> との事ですが、どの様にするのでしょうか?
> 後学のためにご教授下さい。m(._.)m ペコッ
>
> # SERVER_NAMEでとる方法は、ApacheだとVirtual Hostで指定した
> # ドメイン名を返しますが(Linuxで確認、Winは未確認)、
> # AnHTTPDだと、PCの名前を返してきます。
バーチャルホストは呼び出しドメインでアクセスディレクトリーを変えるのですから
SERVER_NAMEで取らなくてもドメインは設置ディレクトリーでわかっているはずです。
No.7401 投稿時間:2002年12月27日(Fri) 20:38 投稿者名:ハル URL:
> バーチャルホストは呼び出しドメインでアクセスディレクトリーを変えるのですから
> SERVER_NAMEで取らなくてもドメインは設置ディレクトリーでわかっているはずです。
レスありがとうございます。
Virtual Hostって事は、別ディレクトリで、呼び出されるCGIも別、、
って事はドメイン名判別は要らないって事ですね、、(^_^;
後は、IPを判別して、アクセス制限代わりにすれば良いと・・・
う~ん、頭の中だけで考えたらダメですねぇ (_ _ )/ハンセイ
htmlは別にして、perlで読み込んで吐き出せば、htmlのメンテも楽と・・・
あっ、私がドメイン別にIP制限をかけたい、スレ元では無かった、、(笑)
No.7410 投稿時間:2002年12月28日(Sat) 06:42 投稿者名:うさぎ URL:
OAKさん、丁寧に教えていただきありがとうございます。
画像の置き場所にCGIをおいて環境変数により異なる画像を出力する
方法は初めてなので、こんな使い方があると知って感動しています。
ただ実行してみたのですが、画像が表示されません。(X印)
public_htmlの中には以下のファイルを置きました。
(1)index.html(<html><body><img src="img.cgi"></body><html>)
(2)a.jpg,bjpg
(3)img.cgi
$ADDR = $ENV{'REMOTE_ADDR'};
$filename= 'b.jpg';
if ($ADDR eq '127.0.0.1' ) { $filename='a.jpg' ;}
print "Content-type: image/jpeg\n\n";
open(FH,"<$filename")
binmode(STDOUT);
binmode(FH);
print <FH>
close(FH);
CGIはこのディレクトリでも実行可能です。
ぜひこの使い方をマスターしたいので
なにがいけないのかご指導おねがい致します。
No.7412 投稿時間:2002年12月28日(Sat) 09:10 投稿者名:OAK URL:
>
> $ADDR = $ENV{'REMOTE_ADDR'};
> $filename= 'b.jpg';
> if ($ADDR eq '127.0.0.1' ) { $filename='a.jpg' ;}
> print "Content-type: image/jpeg\n\n";
> open(FH,"<$filename")
> binmode(STDOUT);
> binmode(FH);
> print <FH>
> close(FH);
このままコピペしてチェック&行しましたが4箇所直さないと動きません
ファイルの属性は755です。
(1)先頭に #!/usr/bin/perl (これはWindowsでは?です)
(2)if(){ の後ろに全角スペースあり
(3)open と最後の print に ; がない。
Windowsでも perl -c でチェックできますよね。
(参考)私のTOPページの画像はCGIです。その中身は
#!/usr/bin/perl
$fnm="p.jpg";
print "Content-type: image/jpeg\n";
print "\n";
binmode(STDOUT);
open(FHH , "<$fnm");
binmode(FHH);
print <FHH>;
close(FHH);
exit(0);
######################## program end ########################
本当はファイル読み取り部分はループにしなければいけないのですが
バイナリーだとそれほど大きくないファイルだと1度で読めるので問題はないはず。
カウンターはたいてい画像をCGIで渡します。
No.7473 投稿時間:2002年12月29日(Sun) 11:21 投稿者名:うさぎ URL:
OAKさん、ありがとうございます。とうとう成功しました。
プロキシ経由だとちがう画像がでてきた時には"おおっ"
と言ってしまいました。
ただ127.0.0.1の所を変数化して、データベースに問い合わせる形
にしようと思います。queryとやらがでてきたのでまた勉強です。
No.7479 投稿時間:2002年12月29日(Sun) 18:19 投稿者名:うさぎ URL:
OAKさんに教えていただいたimg.cgiに少し手を加えて
フォームから入力のあったIPアドレスと自分のアドレスが
一致すればa.jpg,そうでなければb.jpgがでるつもりで、
以下のファイルをつくりましたが、一致しているにもかかわらず、
b.jpgがでてしまいます。なにが勘違いなんでしょうか?
(1)index.html
<html><body>
<form action="img.cgi" method="GET">
IPアドレス<input type="text" name="IP">
<input type="submit" value="入力">
</form><BR>
<img src="img.cgi">
</body><html>
(2)a.jpg,b.jpg
(3)img.cgi
$IP = $ENV{'QUERY_STRING'};
$ADDR = $ENV{'REMOTE_ADDR'};
$filename= 'b.jpg';
if ($ADDR eq $IP ) { $filename='a.jpg' ;}
print "Content-type: image/jpeg\n\n";
open(FH,"<$filename");
binmode(STDOUT);
binmode(FH);
print <FH>;
close(FH);
No.7481 投稿時間:2002年12月29日(Sun) 19:08 投稿者名:OAK URL:
> $IP = $ENV{'QUERY_STRING'};
> $ADDR = $ENV{'REMOTE_ADDR'};
> $filename= 'b.jpg';
> if ($ADDR eq $IP ) { $filename='a.jpg' ;}
> print "Content-type: image/jpeg\n\n";
> open(FH,"<$filename");
> binmode(STDOUT);
> binmode(FH);
> print <FH>;
> close(FH);
最後に
open (FH,">test.dat");
print FH $IP;
とでも付け加えて'QUERY_STRING'がどういう文字データか見ればわかります
No.7543 投稿時間:2003年01月01日(Wed) 18:10 投稿者名:うさぎ URL:
OAKさん(というより先生)あけましておめでとうございます、
いいお年玉をいただき、ありがとうございます♪
わかりました!、データが=でつながっているから
分割しなくてはいけないのですね。
IPアドレスの数字だけを$IPと定義したら成功しました。
今年もよろしくお願いします。
No.7574 投稿時間:2003年01月02日(Thu) 16:06 投稿者名:うさぎ URL:
CGI間でデータを共有したいのですが
ファイルに書き込んで、開いてという
以外に方法はあるのでしょうか?
以下のような事がやりたいのですが・・
-img.cgi-
$ADDR = $ENV{'REMOTE_ADDR'};
$ADDRX = x.cgiで取得したIPアドレス;
$filename= 'b.jpg';
if ($ADDR eq $ADDRX) {$filename='a.jpg';}
print "Content-type: image/jpeg\n\n";
open(FH,"<$filename");
binmode(STDOUT);
binmode(FH);
print <FH>;
close(FH);
-x.cgi-
$ADDRX = $ENV{'REMOTE_ADDR'};
以下略
No.7593 投稿時間:2003年01月03日(Fri) 15:46 投稿者名:うさぎ URL:
$ADDRX = $ENV{'REMOTE_ADDR'}をデータファイルに出力して
それをimg.cgiが読み取るようにしたら成功しました。
段々とスクリプトの意味がわかってきました。