|
はじめまして^^ ネットワーク関連のプログラムいつも参考にさせていただいております。 今回ちょっとおききしたいことがありまして書き込ませていただきます。 内容がこちらのページの趣旨と離れて申し訳ないのですが、 お返事いただければ幸いです。 いきなり本題にはいらせていただきます。 <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 |
|
>>3434 初心者 シェルの一行目を #/bin/csh -x に変更して再実行すれば 実際に変数に何が入ってくるか確認できますよ。 |
|
No. 3436 の通りすがりさん、No. 3440 zshさん、 書き込みありがとうございます 私の環境が違うのかも知れません。下記のように表示されてるので。 Digital UNIX V4.0B (Rev. 564 Digital UNIX Japanese Support V4.0A (rev. 3.1) で、やっぱりおっしゃるとおり実行したのだけど、だめなんです。 if ( $a == $b ) の、右辺の変数名が、分かりません、とかそう言うエラーが出るので、 結局 @ df=$a - $b if ($df == 0 ) で、何とかうまくいきました。 ありがとうございました。 |
|
>>3431 68user こんにちは、Muleです。 すみません、コマンドでtelnet起動、失敗しました(^^; これが出来たら、結構使えるスクリプトになるかもと思っていたのですが、やはり無理がありますかね... コード全体の流れとしては、 プロキシのチェックルーチンをよび、flagが立っていればif分岐、という典型的な処理です。 if($flag){ #telnetを起動し、接続元をファイルに記録する処理 } else{ my $img = 'file.gif'; my $byte = (stat $img)[7]; print "Content-Type: image/gif\n"; print "Content-Length: $byte\n\n"; open IMG,$img; binmode((binmode(IMG),$|=1)[0]); print map {$_} <IMG>; close IMG; } やはり、イメージで呼び出すという方式では、FTPで、というのが、現実的でしょうか? socketと組み合わせれば、なんとかなりそうな気がしていろいろ試してみましたが...上手く行かないものですね。 |
|
>>3442 Mule わたしは http は proxy 経由かもしれないが、ftp や telnet は proxy 経由でないことを期待して、クライアント側から ftp や telnet でサーバに接続させるように仕向けて、 IP アドレスを取得する と思っていたのですが、そうではないようですね。 > コード全体の流れとしては、プロキシのチェックルーチンをよび、 > flagが立っていればif分岐、という典型的な処理です。 「proxy のチェック」というのは公開 proxy サーバかどうかを 調べるため、クライアントの IP アドレスに接続してみる、という ことですよね。 telnet で接続、というのは http://x68000.startshop.co.jp/~68user/unix/pickup?sleep てな方法でできます。もちろん代わりに Socket を使ってもいいです。 方法はともかく、公開 proxy かどうかの判断はやろうと思えばできます。 で、なぜ if($flag){ #telnetを起動し、接続元をファイルに記録する処理 } と proxy チェックルーチンを呼んだ後 ($flag が確定した後) に もう一度 telnet を実行する必要があるのでしょうか? #telnet を起動し、クライアントの IP アドレスに接続。 #接続できたら $flag=1; if($flag){ #接続元をファイルに記録する処理 open(LOG, ">log"); print LOG "$ENV{REMOTE_ADDR} is open proxy\n"; close(LOG); } とすればよいのではないですか? |