サーバはLinuxです。 POSTデータをスクリプトに送信すると、わかりにくい問題が発生します。perlスクリプトのPOSTデータを使った不思議な動作
例えば、私は以下のPOSTデータを送信します。ここではchoice=update
はスクリプトです:
#!/usr/bin/perl -w
print "Content-type: text/html\n\n";
if ($ENV{'REQUEST_METHOD'} eq "GET") {
$in = $ENV{'QUERY_STRING'};
} elsif ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN,$in,$ENV{'CONTENT_LENGTH'});
}
@in = split(/&/,$in);
foreach $i (0 .. $#in) {
# Convert plus's to spaces
$in[$i] =~ s/\+/ /g;
# Split into key and value.
($key, $val) = split(/=/,$in[$i],2); # splits on the first =.
# Convert %XX from hex numbers to alphanumeric
$key =~ s/%(..)/pack("c",hex($1))/ge;
$val =~ s/%(..)/pack("c",hex($1))/ge;
# Associate key and value
$in{$key} .= "\0" if (defined($in{$key})); # \0 is the multiple separator
$in{$key} .= $val;
}
print $in{'choice'};
私はスクリプトに初めてアクセスするには、それがupdate
私はそれにアクセスする第二の時間を表示します、それは印刷する
updateupdateupdate
...などを印刷します。
何が原因で、リクエストの間に文字列を追加し続けることができますか?私はブラウザで簡単にリフレッシュするだけで毎回同じPOSTデータを送信しています。クッキーは使用されていません。コメントアウトされていないファイルはありません。
編集:また、私がprint <STDIN>
と言うときは毎回choice=update
と表示されます。他のupdate
は追加されていないようですSTDIN
CGI.pmを使用していない理由はありますか? – mwp
'use strict;'を使わない理由はありますか? –
どちらの質問にも、これらはお勧めのことだと私は理解していますが、私はコードを書いていませんでした。私はそれを誰かのために働かせようとしているだけで、私のperlの知識は非常に限られています。 – Mike