На сервере: debian stable 6 + ngnix + perl + fastcgi:
use CGI::Fast;
#...
while(my $cgi = CGI::Fast->new()) {
#...
if(!defined($cgi->param('file'))){
print <<"T";
<html>
<head>
<body>
<form method="post" action="/x/" enctype="multipart/form-data">
<input type="file" name="file"><br>
<input type="submit" name="button" value="Ok">
</form>
</body>
</html>
T
}
else{
my $name = $cgi->param('file');
my $fh = $cgi->upload('file');
my $size = 0;
my $buffer;
open(my $f, ">$DIRNAME/$name") or $!;
while (my $c = read($fh,$buffer,16384)) {
$size += $c;
print $f $buffer;
}
close($f);
print <<"T";
<html>
<head>
<body>
OK. FileName: $name, FileSize: $size
</body>
</html>
T
#...
}
Файл на сервер загружается, но почему-то физически на диске большего размера, чем лежит в переменной $size по результатом загрузки и изначальный файл.
Я заметил, что это происходит с бинарным файлом, с текстовым нет, хотя для linux на сколько я знаю разницы нет. Как исправить? Что не верно в коде?