#!/usr/bin/perl use CGI; use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); my $q = new CGI; my $save_dir = "/home/user/www/upload_dir"; my $file = $q->param("file"); open(OUTFILE, ">$save_dir/file.zip") || die "can't create file: $!"; while (read($file, $buffer, 1024)) { print OUTFILE $buffer; } close(OUTFILE); chmod (0666, "$save_dir/file.zip"); my $file_patch = $save_dir . "/file.zip"; my $zip = Archive::Zip->new($file_patch); my @files = $zip->members(); foreach (@files) { my $unzip_file = $_->fileName; $zip->extractMember($unzip_file); if ($zip->extractMember($unzip_file) != 0) { die print "Extraction of $file failed: $!"; } }