У меня есть этот Perl / CGI для загрузки файлов и получения размера загруженного файла во время загрузки.
Сценарий отлично работает для файлов размером менее 500 МБ, но буфер (OUTFILE) прекращает запись файла после примерно 500 МБ.
Вот частичный код:
$u_size = $ENV{'CONTENT_LENGTH'};
if ($u_size > $max_size) {send_error ("Upload too big. Maximum size is $max_size bytes and your file is $u_size bytes.");}
print_progress(0);
# Set up uploading function
$query = CGI->new(\&hook);
#define functions
sub hook {
if ($error) {return;}
if (time >= $next_print) {
$next_print = time + $delay;
my ($filename, $buffer, $bytes_read, $data) = @_;
if ($check_mime) {
$filename =~ m/\.([^\.]+)$/;
$ext = lc($1);
print $ext;
$check_mime = 0;
}
$percent = $bytes_read / $u_size;
$filename =~ m/\\([^\\]+)$/;
$filename = $1;
print_progress($percent, $u_size, $bytes_read, $filename);
}
}
sub print_progress {
open(PROG, '>'.$uploaded_file_progress);
print PROG '{"percent" : ' . ($_[0] * 100) . ', "total" : ' . $_[1] . ', "uploaded" : ' . $_[2] . ', "filename" : "' . $_[3] . '"}';
close PROG;
}
#############
$uphandle = $query->upload($query->param());
binmode $uphandle;
if (!$error) {
open OUTFILE, ">" . $uploaded_file;
binmode OUTFILE;
while($bytesread = read $uphandle, $buffer, 1024) {
print OUTFILE $buffer;
}
#while (<$uphandle>) {print OUTFILE $_;}
close OUTFILE;
}
Если сценарий не является проблемой, что еще нужно проверить?
Спасибо.
Редактировать: У меня есть в журнале: время ожидания для выхода из сценария CGI.
Как мне избавиться от этого? Я не смог найти точный ответ в Google.