#!/usr/bin/perl use strict; use warnings; use CGI qw/:all/; use CGI::Carp qw/fatalsToBrowser warningsToBrowser/; use Archive::Tar; use FindBin; # Verzeichnis wo sich die Archive befinden my $dir = $FindBin::Bin . '/../archives/'; if (param('file')) {print auslesen(param('file'));} else {print anzeigen();} sub anzeigen { # Verzeichnis auslesen und in Hash für CGI speichern opendir DIR,$dir or die "Konnte Verzeichnis $dir nicht öffnen: $!"; my @files = grep !/^\.\.?$/ && /(?:\.tgz|\.tar|\.tar.gz)$/i,readdir DIR; closedir DIR; # HTTP-Header und HTML-Code ausgeben return header(), start_html(-title=>'Archivanzeige'), h2('Archivanzeige'), start_form(-action=>url(-relative=>1),-method=>'GET'), scrolling_list(-name=>'file', -size=>1, -values=>[ sort @files ], -default=>param('file') || '' ), submit(-value=>'Dateien anzeigen'), end_form, end_html; } #sub sub auslesen { # Parameter holen my $file = shift || ''; # Anzeigeroutine wenn Parameter leer return anzeigen() unless $file; my $tar = Archive::Tar->new(); $tar->read($dir . $file,1) or die "Konnte Archiv $dir$file nicht lesen:$!"; #HTTP-Header und HTML-Code ausgeben return header(), start_html(-title=>'Archivanzeige - Dateilisting'), h2("Folgende Dateien sind im Archiv $file enthalten:"), join br(),sort $tar->list_files(), a({-href=>url(-relative=>1)},"Zurück"), end_html; }# sub exit;