服務器是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數據。 Cookies未被使用。文件中沒有其他內容沒有被註釋掉。
編輯此外,當我print <STDIN>
它說choice=update
每一次。其他update
s似乎並沒有被添加到STDIN
你有沒有理由不使用CGI.pm? – mwp 2012-01-29 03:03:35
你有沒有理由不使用'嚴格使用';? – 2012-01-29 03:10:09
對於這兩個問題,我都明白這些是推薦的事情,但我沒有編寫代碼。我只是想讓它爲某人工作,而且我的知識非常有限。 – Mike 2012-01-29 03:33:01