|
>>3425 68user > なぜだろう。 あーそうか。$sock がどこからも参照されなくなったので、 perl がガベージコレクトして、デストラクタが close して いるんですね。 |
|
こんにちは。 初めて書き込みいたします。 私は、CGIの使えないサイトで、ちょっとしたプロフのページを管理しています。 このサイトでは、自作CGIは一切使えず、既成のCGIを使うしかないのですが、最近、BBSのほうにおかしな書き込みが増えて困っています。 そこで、アクセス元のログを取ろうと考えまして、自作CGIを書きましたがここで問題が生じました。 おわかりかと思いますが、自作CGIを直接設置できないことが問題です。 ただ、このサイトでは、外部から一枚だけ、画像をリンクして表示できるんですね。 そこで、画像の参照元である手持ちのサーバの.htaccessをいじり、 画像がCGIとして機能するように設定しました。 それで、このCGIファイルを画像のように偽装してサイトにアップロードしました。 これによって、外部CGIを呼び出してログを保存することが出来ましたが、私の考えで言えば、いまどき、 print map {"$_ = $ENV{$_}"} keys %ENV; で表示されるデータなど、あまりあてにはできない... できれば、もっと確実なところで、匿名Proxy経由であれば、telnetを起動して接続元をファイルに保存、などの手法をとりたいのです。 ところが、画像のトリガーを使った方式ではこれが上手くいきません。 ヘッダの出し方に問題があるはずですが、なんとかならないものでしょうか? パワーユーザーの皆様、良い知恵がございましたらご教授ください。 宜しくお願いいたします<m(__)m> |
|
はじめまして^^ ネットワーク関連のプログラムいつも参考にさせていただいております。 今回ちょっとおききしたいことがありまして書き込ませていただきます。 内容がこちらのページの趣旨と離れて申し訳ないのですが、 お返事いただければ幸いです。 いきなり本題にはいらせていただきます。 <a href="$ENV{'SCRIPT_NAME'}?para=data"> としてリンクを作成して、その先のページで <form action="$ENV{'SCRIPT_NAME'}?para2=data2" method='POST'> とします。 このときフォームデータの取り込みのハッシュを%FORMとしたとき 2つめの$FORM{'para2'}が存在しません。 これがなぜおこるのかさっぱりわかりません。 またメソッドをGETでも試しましたがダメでした。 ただし、出力先のURLにはhttp://***.cgi?para2=data2と表示されます。でもprint文では表示されないのです。 原因がわかれば教えていただけないでしょうか? ちなみにperl5でapache1.3.14仕様です。 よろしくおねがいします;; |
|
>>3427 Mule 試してませんが、画像側で Location: telnet://example.com:1234 ではダメですか? (ダメなような気もしますが) 掲示板側では img src でしか外部リソースを呼び出せない、 という条件のもとでは、これ以外の方法は思いつきません でした。 >>3428 perler 誰かが環境変数 %ENV を解析し、その結果を %FORM に セットしなければならないわけですが、その部分はどこが 担当していますか? (CGI モジュールですか?) |
|
>>3429 68user ご返事ありがとうございます。 Locationは私も考えましたが、その方法は無理でした。 しかし、コマンドで上手く行きそうです。 現在、実験中ですので、詳細はまたご報告いたします。 とりあえず、今日はご報告まで。 お忙しい中、返事をいただきましてありがとうございました。 |
|
>>3430 Mule できそうですか。ぜひ結果を教えてください。 |
|
初歩的な質問で、申し訳ないのですが、教えていただけると助かります。 Bシェルでは、 if [$a = $b] then echo "ok!" fi などと、if文の中で、変数同士の値を比較してイコールならば、とかけますが、 Cシェルでは出来ないのでしょうか? |
|
通りすがりですが、 #!/bin/csh set a = 2; set b = 2; if(a == b) then echo "a = b" else if(a < b) then echo "a < b" else echo "a > b" endif で良かったと思います。 |
|
cshさん書き込みありがとうございます 実は、変数には、どの値が入ってくるか、分からないのです。 例えば、 ps -o user,pid,ppid,comm -A | grep -i $1 | grep -v grep > lis.txt set cmd1=(`awk '{print $2}' lis.txt`) set cmd2=(`awk '{print $3}' lis.txt`) @ cnt1=0 @ cnt2=0 foreach pid1 ( $cmd1 ) @ cnt1++ foreach ppid1 ( $cmd2 ) @ cnt2++ if ( $pid1 と$ppid1に入った値がイコールならば ) then echo 'zero!!' echo $pid1 $ppid1 >> procs1.txt ....... end end 。。。。。。みたいに。その、かっこの中を、どう書いてもエラーが出るんです。基本的なミスなのか、それともcでは出来ないのか、、、分からなくて。 if ($a==1) thenはOKでも、($a==$b)、はだめでした。 |
|
あ、すみません。。。。半角カナ。 |
|
>>3434 初心者 HP-UX11.0の環境で確認しましたが「==」で問題無く一致を検知できました。 「==」の前後に空白が無いと上記OSでは文法上のエラーになりました。 ご参考になれば。 |
|
>3429 お早いお返事ありがとうございました。 質問の答えなのですが、同プログラム内で%FORMによみこんでおります。 sub func { my($query,$pair); if($ENV{'REQUEST_METHOD'} eq 'POST'){ read(STDIN,$query,$ENV{'CONTENT_LENGTH'}; }else{$query=$ENV{'QUERY_STRING'};} foreach $pair (split/&/,$query){ ($key,$value)=split(/=/,$pair); #デコード処理 $FORM{$key}=$value; } このサブルーチンで処理させております。 ちなみにただのメールフォームではなにも問題なく動作します。 |
|
BSD UNIX 類のどれか欲しいんですけどお勧めはありますか? |
|
>>3437 perler > <form action="$ENV{'SCRIPT_NAME'}?para2=data2" method='POST'> という書き方をした場合、メソッドは POST ですが para2=data2 は 環境変数 QUERY_STRING 経由で渡されます。よって、 POST なら標準入力から読む というやり方では、QUERY_STRING からの入力は無視されてしまいます。 >>3438 超初心者 初心者ということであれば、FreeBSD 4.9-RELEASE がお勧めです。 http://www.h4.dion.ne.jp/~katsuwo/index.html |