WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:リンク元の取り方

0:[投稿] アクア [2002/11/29 10:56 ][環境:WIN+IE WIN系+Perl]

イメージタグでCGIをリクエストして
$ENV{'SERVER_ADMIN'}でアクセス元を取ると
イメージを呼び込んだ場所になりますが
その前のどこから来たかを調べる手立ては無いのでしょうか?
javaを使うと携帯のログが取れないので
それ以外で方法をご存知の方ご指導お願いします。


1:[関連] 聖魔 [2002/11/29 12:02 ]

アクアさんすみません
自分も同じところがわからないので便乗質問をさせていただきます

index.htmlに
<img src="main.cgi?link">とかいて、

CGIの方に
if(open(LINKFILE,">>$Linklog")){
print LINKFILE "$ENV{'HTTP_REFERER'}\r\n";
close LINKFILE;
}
else{
print "ファイルを開けませんでした";
}
print "Content-type: image/gif\n\n";
open(IMG,"dummy.gif");
binmode(IMG);
binmode(STDOUT);
print<IMG>;
close (IMG);
とかいて、リンク元を取ろうと思ったのですが、
これだとindex.htmlのアドレスしか書き込まれません
どうすればindex.htmlの前にいたアドレスを取得できるのでしょうか?

宜しくお願いします

$ENV{'SERVER_ADMIN'}でアクセス元が取れるのですか?
私はてっきりサーバー管理者のメールアドレスを取るものだと
思っていました。
まだまだ勉強不足ですね


2:[回答] アクア [2002/11/29 12:26 ]

あっ!ごめんなさい記述ミスしてます聖魔氏の方の
$ENV{'HTTP_REFERER'}です。
ちなみに<img src="main.cgi?link">で記述すると呼び出し元
(index)などになってしまいます。なぜなら
'HTTP_REFERER'これ自体が呼び出し元を取っているからです。
なのでimg src="main.cgi?linkこの記述の場合はhtmlがCGIを呼び出したと解釈をしてindexと値を返してきます。
もし聖魔氏のHPが携帯をメインとしていないのならjavaを使ってみては如何ですか?
当方は携帯をメインとしていますのでjavaが使えないんですよ^^;


3:[回答] 聖魔 [2002/11/29 12:39 ]

レスありがとうございます

javaですか…使ったことはもちろん
みたこともないです。
覚えるしかないですかね。

java意外だとSSIとか言うのを使ってするみたいですね
http://www.pa.airnet.ne.jp/zap/ssi/accesslog4.html

ありがとうございました


4:[回答] アクア [2002/11/29 13:05 ]

そうですねSSIもありますが借りているサーバースペースでは利用できない可能性あるので確認してくださいね。


5:[関連] 薫 [2002/11/29 13:16 ]

ずっと気になっていたのですが、java=javascript ではありませんよ。
http://www.geocities.co.jp/SiliconValley-Oakland/1999/inet/007.html

リファラは隠すことも虚偽することもできるので、
あまり信用しないほうがよいでしょう。
http://www.st.ryukoku.ac.jp/~kjm/security/memo/referer.html


6:[回答] 聖魔 [2002/11/29 13:42 ]

何度もすみません

>薫さん
すみません別なものとは知っているのですが…
javaScriptをjavaと呼ぶクセを直さなければ

>リファラは隠すことも虚偽することもできるので、
>あまり信用しないほうがよいでしょう。
そうなんですか…
リンク元を完全に取る方法はないですかね

でもとりあえずjavaScriptで書こうと思って、
これを機会にjavaScriptを覚えようと思います
どこかお勧めのHPがあれば教えて下さい

>アクアさん
>そうですねSSIもありますが借りているサーバースペースでは利用できない可能性あるので確認してくださいね。
基本的にSSIは使いたくないというか、なんとなく避けたい気がします
自分で言っといてどうかと思いますが…
すみません

宜しくお願いします。


7:[回答] andi [2002/11/29 14:03 ]

> どこかお勧めのHPがあれば教えて下さい

先人のお薦めのサイトを聞くのも悪いことではありませんが、
まずは自分で探してみる癖を付けておくと良いと思いますよ。
Yahooで検索しても充分に役に立つサイトは見つかると思いますし。


8:[回答] 聖魔 [2002/11/29 15:20 ]

そ、そーですね
おっしゃるとおりです。

それではまたわからないことがあれば
質問させていただきます

アクアさんの質問にレスがつかないですね。
私が便乗したからでしょうか?
どうも申し訳ございません。


9:[回答] アクア [2002/11/29 15:58 ]

う〜んまた怒られてしまった^^;javascriptはjavaとは別と知ってるのですが・・・・なおさなきゃ・・・

まぁ〜当方も色々調べてるのですが方法が無いみたいですからね〜
どっちにしろレスが付かないのではなく出来ないと言った感じでしょうね;;

では少しばかりCGI配付サイトを教えましょうかね
http://www.eclib.jp/index.html 
http://www.206.usn.ac/
この二つが有名どころですね
では^^


10:[質問] 聖魔 [2002/11/29 17:47 ]

教えていただきありがとうございます。
色々ダウンロードしてみてみたのですが
分からないことがありますので
追加質問になってしまい申し訳ないのですが宜しくお願いします。

JavaScriptを使用して、リンク元のURLを取得することは出来たのですが、
それからどうすればいいのかわかりません。

一回CGIの方に送らないといけないのでしょうか?
でしたらすみませんが送り方を教えて下さい。

それともJavaScriptを使用して、直接ファイルに書き込んで
それをCGIで読み込んで表示するのでしょうか?
宜しくお願いします


11:[回答] gun [2002/11/29 18:33 ]

JAVAスクリプトは、ブラウザ上で実行されるものですから、
直接ファイルアクセスをすることはできません。
ファイルに書き込むには、CGIにデータを送る必要があります。

CGIにデータを送るには2つの方法があります。

方法1. フォームで送る方法
下の例のようにしてフォームを記述したHTMLの[ok]ボタンを
をクリックすることでデータが送られます。
[例]
<form action="log.cgi" action="POST">
<input type="hidden" name="referer_url" value="http://referer_url/index.html">
<input type="submit" value=" ok ">
</form>

方法2. URLにデータを含めて渡す方法
エンコード&デコード処理が必要ですが、
フォームは不使用でイケます。
[例]
http://www.ex_url.com?referer_url=http://referer_url/index.html

聖魔さんのご要望に沿うものを作成するには、
方法2 をうまく利用することになります。


12:[回答] gun [2002/11/29 18:35 ]

訂正

方法2.
[例]
http://www.ex_url.com/log.cgi?referer_url=http://referer_url/index.html


13:[回答] 聖魔 [2002/11/29 19:33 ]

皆様ありがとうございます。
皆様のおかげで無事解決しました。
ソースは
<SCRIPT language="JavaScript">
<!--
{
if (document.referrer.length !=0 ){
xx = document.referrer;
document.write("<img src=main.cgi?link=",xx,">");
}else{
document.write("");
}
}
// -->
</SCRIPT>
こんな感じです

>gunさん
申し訳ないのですが、リンクを見ることが出来ないみたいです
今後の参考のためにもみてみたいので宜しければもう一度よろしくお願いします。

まだ超初心者で分からないことだらけですが
今後も宜しくお願いします
アクアさんの問題がまだ解決していないので
状態はこのままにしておきます

ありがとうございました。


14:[回答] gun [2002/12/02 09:01 ]

あ、違います。
リンクのつもりじゃなくて、
URLにデータを含めて渡す場合の"URLの例"のつもりでした。
紛らわしくてごめんなさい。


15:[回答] 聖魔 [2002/12/02 10:13 ]

あ、そーなんですか
勘違いすみません


16:[回答] Malic [2002/12/02 11:46 ]

履歴(アクセスログ)を取りたいページをすべてCGIで書き出すようにするしかないと思います。

基本的には、CGIで、 $ENV{'HTTP_REFERER'} の取得と保存(ファイル等に) と、HTMLの書き出しをする。
あとはファイルのロック、デッドロックの処理等加えてください。


17:[回答] ひじ [2002/12/03 21:48 ]

そもそもiモード端末はRefererを送って来なかったような気が…
(ezweb端末は送って来ます)


18:[回答] アクア [2002/12/04 09:15 ]

iモード端末でもRefererを送って来ない物とくる物があります。
Malicさんの言った通り全てをCGIで書き出す以外ないのかな・・


19:[回答] gun [2002/12/04 09:38 ]

ログをファイル出力して、ファイルを読み込んで標準出力するだけのCGIなら、
作成するCGIは一本で済みますよね。

ファイル名(ここではindex.html)の渡し方は横着ですが、
http://hogehoge.com/output.cgi/index.html
のようなURLでCGIを起動することを想定しています。
------------------
[output.cgi]
------------------
&write_log;    #ログ出力
&output;
sub output {
    my $target_file;
    my $buffer;
    $target_file=$ENV{'PATH_INFO'};
    print "Content-type: text/html\n\n";
    open(IN, $target_file ) or die;
    while (read(IN, $buffer, 10000)) {
        print $buffer;
    }
    close(IN);
}
------------------


20:[回答] アクア [2002/12/04 10:32 ]

なるほど一つのCGIを各ページの間に挟む分けですね。
でもってログは一つにして$ENV{'PATH_INFO'}でどこからリクエストされたかを取ると言う意味ですね。
でもそれって
http://www.xxx.xxx.xx.jp/cgiーbin/xxx/xxx.cgi/~moriq/java/index.html
にアクセスしたら$ENV{'PATH_INFO'}に/~moriq/java/index.html
が入ると言った仕掛けでよろしいのでしょうか?

でもどうやってCGIが起動してるのかがわからないのですが?
別にCGIをリクエストしなくてもCGIって起動するんですか?


21:[回答] gun [2002/12/04 10:49 ]

> でもどうやってCGIが起動してるのかがわからないのですが?
> 別にCGIをリクエストしなくてもCGIって起動するんですか?

$ENV{'PATH_INFO'}を使用したのは、ただの横着ですが、
$ENV{'PATH_INFO'}について調べてみると、>>19のURLで
CGIをリクエストしていることが分かると思います。


22:[回答] アクア [2002/12/04 11:12 ]

って事は
http://hogehoge.com/output.cgi/index.html
とした事によりCGIの次にHTMLを見に行くと言った事でしょうか?


23:[回答] gun [2002/12/04 11:25 ]

>>21 で言おうとしたことは、"環境変数PATH_INFOとはどういうもの
なのか、検索や書籍などで調べてみてください"ということでした。

環境変数PATH_INFOについては、ちゃいパパ先生のページにも載ってます。
http://www.parkcity.ne.jp/~chaichan/src/perl04.htm


24:[回答] アクア [2002/12/04 12:14 ]

PATH_INFOはパス情報の取得って事は知っていますが
gunさんの書いたURL先でもcgi-bin/xxx.cgi/taro/xxx.htmとありますが.cgiのあとの/って事がいまいち解らなかったのです。
なので.cgi/の意味をちょっと調べて見ます。


25:[回答] gun [2002/12/04 13:24 ]

あ、ごめんなさい。
あんまり深く考えたことなかったです。
PATH_INFO はCGIにパスを引き渡す方法だと思ってました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World