SektOderSelters: Perl Skript zum Erstellen von ZIP's - Probleme

Beitrag lesen

Hallo Leute,

Ich habe einige Probleme mit einem Skript das ZIP-Dateien erstellen soll. Folgendes Skript funktioniert ganz gut ....

--------------------------------
#! /usr/bin/perl -w

use strict;
use lib ('/perl/lib/zip');
use Archive::Zip qw(:ERROR_CODES :CONSTANTS);

#my $zipName = shift(@ARGV);
my $zipName = 'hallo.zip';
my $zip = Archive::Zip->new();

#foreach my $memberName (map { glob } @ARGV)
foreach my $memberName (map { glob } '../Bilder/Fotosammlungen/Gotcha/*.*')
{
        if (-d $memberName )
        {
                warn "Can't add tree $memberName\n"
                       if $zip->addTree( $memberName, $memberName ) != AZ_OK;
                       #if $zip->addTree( $memberName, 'bilder' ) != AZ_OK;
        }
        else
        {
                $zip->addFile( $memberName )
                        or warn "Can't add file $memberName\n";
        }
}

writeToFileNamed($zipName);

print "Content-Disposition: inline; filename="$zipName" Content-Type: application/zip;\n\n";
open( ZIP, "<$zipName") || die "Datei wurde nicht gefunden\n";
while( <ZIP> ) {
print;
}
close( ZIP );

unlink($zipName);
----------------------------------------------------------

außer das die relativen Pfade in der Zip-Datei leider ein '../' enthalten. Das ist das erste Problem. Weiß jemand, wie man die Pfade in der ZIP-Datei ändern kann, so dass sie "nur" im Verzeichnis /Bilder/ liegen?.

Jetzt zum zweiten Problem. Wenn ich das Skript so umgestalte, dass Argumente an das Skript übergeben kann (im Quelltext die Zeiten die mit # deaktiviert sind -dann fällt natürlich die nächste Zeile im Skript weg - schaffe ich es scheinbar nicht, das Skript aus einem Brwoser aufzurufen und es ausführen zu können

Bsp.: <a href="http://www.domain.de/cgi-bin/ziptest.cgi?test1.zip+*.*"><b>Zip mich</b><font size="1"></font></a>

Scheinbar liegt es daran das Argumente per Browser immer mit diesen "" übergeben werden - aus meinem *.* wird so ein \.\. Test ich das Skript nämlich im Perl-Editor auf meinem Rechner, läuft es einwandfrei.
Meine Versuche die Zeichenkette $ARGV[2] so zu bearbeiten dass ich -Zeichen gelöscht werden endete damit, das ich an dessen Stelle ein Leerzeichen bekomme  ( $text =~ tr/\/ /; ) ...

Ich hoffe jemand von euch weiß Rat ;-),
Vielen Dank,
Robert