#!/usr/bin/perl use strict; use warnings; use CGI; use Fcntl qw(:flock); use Digest::MD5; use CGI::Carp qw(fatalsToBrowser); my $tbase='tmp/'; my $tname='%s.tmp'; my $wait=1; my $interval=2; my $fname; my $size=0; my $ttt=time(); my $cgi=CGI->new(sub{ $size+=$_[2]; $fname=sprintf($tname,Digest::MD5::md5_hex($ENV{QUERY_STRING})) unless($fname); if(time()-$ttt>$interval) { $ttt=time(); if(open(my $fh, '>', $tbase.$fname)) { flock($fh, LOCK_EX); print $fh $size; flock($fh, LOCK_UN); close($fh); } } select(undef,undef,undef,0.3); }); my $action=$cgi->param('action') || ''; my $id=$cgi->param('id') || int(rand(1000000)).time(); $fname=sprintf($tname,Digest::MD5::md5_hex("id=$id")) unless($fname); my $sname=$cgi->script_name(); print $cgi->header(); if($action eq 'empty') { print < LEERLEER EOT } elsif($action eq 'start') { print < UPLOAD
Datei:
EOT } elsif($action eq 'show') { my $size=0; if(open(my $fh, '<', $tbase.$fname)) { flock($fh, LOCK_EX); $size=<$fh>; flock($fh, LOCK_UN); close($fh); } print < FORTSCHRITT

SIZE:$size

EOT } elsif($action eq 'run') { my $ufh=$cgi->param('datei'); #if($ufh && open(my $fh, '>', 'test.out')) #{ # binmde($fh); # my $buffer; # while(read($ufh,$buffer,1024)) # { print $fh $buffer; } #} unlink($tbase.$fname); print < UPLOAD

UPLOAD von $ufh Abgeschlossen

Eine weitere Datei hochladen EOT } else { $wait*=1000; print < UPLOAD <body></body> EOT }