PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zip ohne innere Ordner generieren



sono
19.03.2006, 15:59
Morgen, ich hab ne kleine Funktion die mir ein paar Bilder in ein Archiev Packt und das ganze dann Zipt um Sie komfortabler Downloaden zu können.

Was mich stört ist, dass ich immer die kompletten Pfadnagaben in dem Zipfile haben, obwohl angeblich mitd er -D Option die Pfade nicht mitgenommen werden sollten.

-D do not add directory entries

Zumindest habe ich das so verstanden.




foreach ( $bilder as $bild ){
$adr = $bild['adr'];
$id = $bild['id'];
$name = $bild['name'];

$source = "${picpath}${adr}/$id";
debug_message("$source<br />");
$dest = "$tempfolder/$name";
copy( $source , $dest );

// $zipfile .= " $dest";
}

if( file_exists("${picpath}/temp/${id}.zip")){
unlink("${picpath}/temp/${id}.zip");
}
// exec( "zip -r -0 -D ${picpath}/temp/${id}.zip $zipfile " );
exec( "zip -r -0 -D ${picpath}/temp/${id}.zip ${picpath}/temp/${id} " );


Aber egal ob ich die Files Einzell oder den ganzen Odner übergebe ich habe immer die Pfadangaben mit im Zipfile drin.

Kann mir einer nen Wink mim Zaunpfahl geben wie ich die da raus bekomme?

Gruß Sono

Wolfgang
19.03.2006, 16:26
Hallo
Gehe ich recht , dass es hier um PHP geht?
Kenn mich damit zwar sehr wenig mit PHP aus, da ich alles in Perl mache:
Aber soweit ich das richtig sehe übergibst du als Dateinamen ja den gesamten Pfad mit.



exec( "zip -r -0 -D ${picpath}/temp/${id}.zip ${picpath}/temp/${id} " );


Wenn du die Namen brauchst, dann versuch mal nur die Namen zu übergeben.
Wobei du dabei natürlich vorher im Verzeichnis stehen musst.



Eventuell hilft dir ja die Variable :
ZIPOPT="-D"; export ZIPOPT
EDIT:// sehe gerade, dass du ja das -r weglassen kannst/sollst.
Gruß Wolfgang
PS Von welchem zip reden wir eigentlich?

sono
19.03.2006, 16:48
standard zip aus von Linux.

Aufgerufen über exec. Die Zipfunktion von PHP "mog i ned".

Ich teste das mal ohne r. Thx.
Nachtrag:

Habs hinbekommen:



foreach ( $bilder as $bild ){
if( is_array( $bild ) ) { // Testen ob das ding nicht schon gelöscht wurde
$adr = $bild['adr'];
$id = $bild['id'];
$name = $bild['name'];

$source = "${picpath}${adr}/$id";
debug_message("$source<br />");
$dest = "$tempfolder/$name";
copy( $source , $dest );
}
$zipfile .= " $name";
}

if( file_exists("${picpath}/temp/${id}.zip")){
unlink("${picpath}/temp/${id}.zip");
}
exec( "cd ${picpath}/temp/${id} && zip -0 -D ${picpath}/temp/${id}.zip $zipfile " );


geht doch nichts über Linux Grundlagen, gg.

Gruß Sono

Wolfgang
19.03.2006, 17:01
Hallo @sono

Dann wird der Pfad wohl doch als Dateiname mit übernommen.
Warum du das -r verwenden wolltest ist mir ohnehin nicht klar.

Was ist standard -zip?
Gruß Wolfgang

PS BITTE schreib doch mal Standard. ;)
Ich krieg sonst Augenkrebs.:D

sono
19.03.2006, 17:24
wo liest du dass den mit "t" ? :devil:

Ich meine das Programm "zip" aus /usr/bin/zip
(debian: apt-get install zip) .


-r ist dann wichtig wenn ich nicht die Dateien einzelln sondern nur einen Ordner übergebe, desse Inhalt ins Archiv soll.
Wenn ich da kein -r angebe habe nämlich die Dateien aus dem Odner nicht mit im Archiv. Is klar ne?

Aber jetzt manchs ichs quasi von hinten durch die Brust ins Auge, aber so lange es geht passt das so.


Gruß Sono

Wolfgang
19.03.2006, 17:38
wo liest du dass den mit "t" ? :devil:

Ich meine das Programm "zip" aus /usr/bin/zip
(debian: apt-get install zip) .


-r ist dann wichtig wenn ich nicht die Dateien einzelln sondern nur einen Ordner übergebe, desse Inhalt ins Archiv soll.
Wenn ich da kein -r angebe habe nämlich die Dateien aus dem Odner nicht mit im Archiv. Is klar ne?
Gruß Sono
Jo, ne schon klar. :D
Nur ging aus deinem Skript nicht hervor, dass du das so handeln willst.
Deshalb die Frage.

Standard ist zip bei Debian aber nicht.
Ich habe es z.B. bis heute nicht installiert, da ich es nicht brauche und nicht per default von Installer mitgebracht wird. wer braucht schon zip, wenn er bzip2 haben kann?:D
Mich hatte auch mehr die Version interessiert, da ich mir mal die richtige Manpage ansehen wollte.

Gruß Wolfgang

sono
19.03.2006, 20:26
Ich habe es z.B. bis heute nicht installiert, da ich es nicht brauche und nicht per default von Installer mitgebracht wird. wer braucht schon zip, wenn er bzip2 haben kann?

Jemand der vermeiden will dass 200 Supportmails eingehen, weil Windowsuser anfragen wie man dieses "komische" ".bz2" Teil aufbekommen soll.

:devil:

Versuche nie einem Standard User etwas Neues beizubringen solange es nicht absolut notwendig ist. Du wirst es bereuen.

Gruß Sono

Wolfgang
19.03.2006, 21:03
Hallo

Ich wollte dir ja nicht zip ausreden.:)
IMHO unterstützt aber auch Winzip bz2 tar und gzip.
Von den "Experten" mit Windows auf der Kiste, welche von mir zugesandte
tar bzip oder gzip Archive erhalten haben, habe ich bisher keine Nachfragen erhalten.
Und da wurde schon wegen weit trivialeren Dingen Alarm geschlagen. :D

Gruß Wolfgang
PS Wenn du morgen Standard noch richtig schreibst, bekommst du ein Bienchen von mir. ;)