이 Perl/CGI를 사용하여 파일을 업로드하고 업로드하는 동안 업로드 된 파일 크기를 얻습니다.대용량 업로드시 Perl/CGI 스크립트가 실패합니다
스크립트는 500MB 미만의 파일에서는 제대로 작동하지만 버퍼 (OUTFILE)는 약 500MB 이후에 파일 쓰기를 중지합니다. 다음 부분 코드입니다 : 스크립트가 문제가 아닌 경우
$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에서 확실한 답을 찾을 수 없었습니다.
감사합니다. 이것이 두 서버에서 유일한 것입니다. 나는 그게 그렇게 간단하지 않다고 믿을 수 없다. – user173457