|
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); } とすればよいのではないですか? |
|
>>3439 68user お返事ありがとうございました。 なるほど、それがperlの仕様なんですね^^ 原因がわかりました。 実は <form action="$ENV{'SCRIPT_NAME'}?para2=data2 method='POST'> <input type="hidden" name="mode" value="res"> <input type="submit" value="返信"> </form> とやっていたためPOSTとGETが混在してしまっていたようでした。 この形ではPOSTをGETにかえても成功しませんでした。 管理人さんの助言でこれに気づくことができました。 どうもありがとうございました。 結果だけお伝えしておきます。 method='POST'の場合 http://xxx.cgi?para2=data2となりmode=resがおくられない。 method='GET'の場合 http://xxx.cgi?mode=resとなりpara2=data2がおくられない。 でした。 |
|
>>3444 perler > なるほど、それがperlの仕様なんですね^^ perl とは関係ないです。これは HTML と CGI の領域です。 apache-1.3.29・IE6・Mozilla-1.5 で試した結果、 > method='GET'の場合 > http://xxx.cgi?mode=resとなりpara2=data2がおくられない。 これは正しいです。正確に言うと 「ブラウザが para2=data2 を送らない」 です。 > method='POST'の場合 > http://xxx.cgi?para2=data2となりmode=resがおくられない。 これは間違いです。標準入力を解析していないだけ、でしょう。 以下の CGI スクリプトを実行し、GET と POST それぞれで QUERY_STRING と標準入力にどういう値が入っているか確認 してください。 ------- #!/usr/local/bin/perl print "Content-type: text/html\n\n"; $script_name = $0; $script_name =~ s|.*/||; print <<END; <html><body> <form action="$script_name?para2=data2" method='GET'> <input type="hidden" name="mode" value="res"> <input type="submit" value="GET"> </form> <form action="$script_name?para2=data2" method='POST'> <input type="hidden" name="mode" value="res"> <input type="submit" value="POST"> </form> END print "REQUEST_METHOD=$ENV{REQUEST_METHOD}<br>\n"; print "QUERY_STRING=$ENV{QUERY_STRING}<br>\n"; print "STDIN=\n"; print <STDIN>; |
|
>>3445 68user お返事ありがとうございました。 なるほど、標準入力を解析しないということがわかりました。 パラメーターを指定しているのにPOSTをつかったのがいけなかったようですね。 またGETをつかってもパラメーターを送らないので素直に違う方法を考えます。 ご教授ありがとうございました。 |