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