sub zip { use admin::tools; if(admin::tools::userRechte($main::session->param('user-id'),'d',$aktion)) { use File::Copy; use File::Path; my @r = mysql::get('name,securestring','alben','`id` = \''.$aktion.'\' LIMIT 1'); mkdir('./'.$r[0][0]); #share::logge('Bilderhashes: '.$main::cgi->param('bhash')); # bildhash: format: hash1,hash2,hash3 my @hashes = split(/\,/,$main::cgi->param('bhash')); use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); my $zip = Archive::Zip->new() or seite::fehler( 500 , "ZIP ** FEHLER - KANN ZIP NICHT ERSTELLEN: $!" ); $zip->zipfileComment( 'Galerie: '.$r[0][0]. ' (id:'.$aktion.') -- gedownloaded von http://r.port17.de/galerie/' ) or warn "ZIP ** WARNUNG - KANN ZIP KOMMENTAR NICHT HINFZUFUGEN"; open FAKE, '> ./__ r.port17.de/galerie __'; close FAKE; $zip->addFile( ' ./__ r.port17.de/galerie __' ) or warn "ZIP ** FEHLER - KANN FAKE NICHT ZU ZIP HINZUFUGEN: $!"; unlink ( ' ./__ r.port17.de/galerie __' ); foreach my $b (@hashes) { my @r3 = mysql::get('name','bilder','`hash` = \''.$b.'\''); copy('./bilder/'.$r[0][1].'/org-'.$b.'.jpg','./'.$r[0][0].'/'.$r3[0][0].'.jpg') or warn "ZIP ** FEHLER - KANN ORGBILD './bilder/$r[0][1]/org-$b.jpg' NICHT VERSCHIEBEN: $!"; $zip->addFile( './'.$r[0][0].'/'.$r3[0][0].'.jpg' ) or warn "ZIP ** FEHLER - KANN BILD NICHT ZU ZIP HINZUFUGEN: $!"; } my @zeichen = ("a" .. "z","A" .. "Z", 0 .. 9); my $hash = join ("", @zeichen[map{rand @zeichen}(1 .. 10)]); unless($zip->writeToFileNamed('./.tmp/'.$hash.'.zip') == AZ_OK ) { seite::fehler( 500 ,'ZIP ** FEHLER - KANN ZIPTMP NICHT SPEICHERN: !AZ_OK'); } rmtree('./'.$r[0][0]); my $g = -s './.tmp/'.$hash.'.zip'; print CGI::header( -type => 'application/zip', -Content_length => $g ); open(ZIP, '<./.tmp/'.$hash.'.zip') or seite::fehler( 500 , "ZIP ** FEHLER - KANN ZIPTMP NICHT EINLESEN: $!" ); binmode(ZIP); my $buf; while(read ZIP,$buf,8192) { print $buf; } close ZIP; unlink( './.tmp/'.$hash.'.zip' ) or warn "ZIP ** FEHLER - KANN ZIPTMP NICHT LOSCHEN: $!"; } else { seite::fehler('401','Rechte zum Download nicht ausreichend'); } }