Der ZIP-komprimierte Ordner ist ungültig
Elkos
- php
Hallo,
ich erstelle ein Zip-Archiv mit der shell von 7-zip: shell_exec("7z.exe a -mx=5 -tzip $archivname $arc_files"), versuchsweise auch mit der zip.lib.php. Das Archiv wird korrekt in einem temporären Verzeichnis erstellt und mittels fpassthru() mit den Headern:
header("Content-type: application/octet-stream');
header('content-type: application/x-zip");
header('Content-Disposition: attachment; filename="archiv.zip"');
an den Browser (IE6 bzw. Firefox 3.05) gesendt. Das Archiv wird mit den Optionen "öffnen" und "speichern" korrekt angezeigt. Klicke ich auf öffnen bekomme ich die Fehlermeldung "Der ZIP-komprimierte Ordner ist ungültig oder beschädigt". Speichere ich die Datei läßt sie sich ebenso wenig direkt von Windows öffnen.
Mit dem lokal installierten 7-Zip kann ich das Archiv öffnen und sehe in den Dateieigenschaften "7-Zip.GZip", obwohl ich, s.o. in den Parameter der shell explizit "zip" und nicht "Gzip" als Komprimierungstyp angegeben habe. Genau das gleiche passiert wenn ich z.B. die Klasse "zip.lib.php" an Stelle von 7-Zip benutze. Auch die damit erzeugten Dateien tragen in den Eigenschaften den Zusatz ".GZip".
Testweise habe ich den ZIP File durch das Script erstellen lassen, die Ausgabe an den Browser aber unterdrückt. Die Datei liegt also noch im temporären Verzeichnis des Webservers. Hier kann ich die Datei mit den Windows Bordmitteln problemlos öffnen. Erst nachdem ich ich sie mittels fpassthru() oder readfile() mit den o.g. Headern an den Browser sende geht das nicht mehr.
Wo kann hier die Ursache liegen, was ist die Lösung, ich bin ratlos.
Gruß
Elkos
Hallo!
header("Content-type: application/octet-stream');
header('content-type: application/x-zip");
Schau mal auf die Anführungszeichen (schon zum 2. Mal heute ein Anführungszeichen-Fehler - ob es am Freitag, dem 13. liegt?)...
Der PHP-Code übermittelt den Header:
Content-type: application/octet-stream');
header('content-type: application/x-zip
Das ist natürlich kein valider Header und so kann die Übertragung nicht funktionieren.
Gruß, LX
--
X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: Unusual
X-Please-Search-Archive-First: Absolutely Yes
Hallo LX,
ich habe den Quellcode per Copy & Paste in diesen Texteditor kopiert. Dabei ist genau das passiert. Im Originalquellcode sind die Zeichen richtig gesetzt, ich habe das nur beim Erstellen des Forumsbeitrags übersehen. Richtig ist natürlich:
header('Content-Transfer-Encoding: binary');
header('Content-type: application/octet-stream');
header('content-type: application/zip');
header('Content-Disposition: attachment; filename="archiv.zip"');
und das geht genauso wenig :-(
Hallo!
»» ~~~php
header("Content-type: application/octet-stream');
header('content-type: application/x-zip");
>
> Schau mal auf die Anführungszeichen (schon zum 2. Mal heute ein Anführungszeichen-Fehler - ob es am Freitag, dem 13. liegt?)...
>
> Der PHP-Code übermittelt den Header:
>
> Content-type: application/octet-stream');
> header('content-type: application/x-zip
>
> Das ist natürlich kein valider Header und so kann die Übertragung nicht funktionieren.
>
> Gruß, LX
Hi,
ich habe den Quellcode per Copy & Paste in diesen Texteditor kopiert. Dabei ist genau das passiert. Im Originalquellcode sind die Zeichen richtig gesetzt
Wenn simples Copy&Paste Daten veraendert, dann solltest du dein System neu aufsetzen.
MfG ChrisB
Ich muss mich einmal korrigieren, im Firefox funktioniert es. Auf Grund durch mich nicht beinflussbarer Vorgaben muss es aber auch zwingend im IE6 funktionieren.
Gruß
Elkos
Hallo,
ich erstelle ein Zip-Archiv mit der shell von 7-zip: shell_exec("7z.exe a -mx=5 -tzip $archivname $arc_files"), versuchsweise auch mit der zip.lib.php. Das Archiv wird korrekt in einem temporären Verzeichnis erstellt und mittels fpassthru() mit den Headern:
header("Content-type: application/octet-stream');
header('content-type: application/x-zip");
header('Content-Disposition: attachment; filename="archiv.zip"');an den Browser (IE6 bzw. IE7) gesendt. Das Archiv wird mit den Optionen "öffnen" und "speichern" korrekt angezeigt. Klicke ich auf öffnen bekomme ich die Fehlermeldung "Der ZIP-komprimierte Ordner ist ungültig oder beschädigt". Speichere ich die Datei läßt sie sich ebenso wenig direkt von Windows öffnen.
Mit dem lokal installierten 7-Zip kann ich das Archiv öffnen und sehe in den Dateieigenschaften "7-Zip.GZip", obwohl ich, s.o. in den Parameter der shell explizit "zip" und nicht "Gzip" als Komprimierungstyp angegeben habe. Genau das gleiche passiert wenn ich z.B. die Klasse "zip.lib.php" an Stelle von 7-Zip benutze. Auch die damit erzeugten Dateien tragen in den Eigenschaften den Zusatz ".GZip".
Testweise habe ich den ZIP File durch das Script erstellen lassen, die Ausgabe an den Browser aber unterdrückt. Die Datei liegt also noch im temporären Verzeichnis des Webservers. Hier kann ich die Datei mit den Windows Bordmitteln problemlos öffnen. Erst nachdem ich ich sie mittels fpassthru() oder readfile() mit den o.g. Headern an den Browser sende geht das nicht mehr.
Wo kann hier die Ursache liegen, was ist die Lösung, ich bin ratlos.
Gruß
Elkos
echo $begrüßung;
Das Archiv wird korrekt in einem temporären Verzeichnis erstellt und mittels fpassthru() mit den Headern:
Hast du die Hinweise im PHP-Handbuch zu fpassthru() beachtet?
header("Content-type: application/octet-stream');
header('content-type: application/x-zip");
Ein Apfel kann nicht gleichzeitig eine Melone sein. Eine Ressource hat genau einen Inhaltstyp, nicht zwei.
echo "$verabschiedung $name";
Hallo dedlfix,
habe ich mir zu Herzen genommen und den Content-Type auf x-zip beschränkt. Funktioniert genauso wenig. Wie gesagt, der Firefox (habe ich im 2. Thread korrgiert) will, der IE nicht.
Gruß
Elkos
echo $begrüßung;
»» Das Archiv wird korrekt in einem temporären Verzeichnis erstellt und mittels fpassthru() mit den Headern:
Hast du die Hinweise im PHP-Handbuch zu fpassthru() beachtet?
»» header("Content-type: application/octet-stream');
»» header('content-type: application/x-zip");Ein Apfel kann nicht gleichzeitig eine Melone sein. Eine Ressource hat genau einen Inhaltstyp, nicht zwei.
echo "$verabschiedung $name";
echo $begrüßung;
Bitte zitiere sinnvoll (nur die Teile, auf die du dich konkret beziehst), und nicht im TOFU-Stil.
habe ich mir zu Herzen genommen und den Content-Type auf x-zip beschränkt. Funktioniert genauso wenig.
"Funktioniert nicht" funktioniert nicht. Beobachte und beschreibe genauer!
Wie gesagt, der Firefox (habe ich im 2. Thread korrgiert) will, der IE nicht.
Gibt es Unterschiede, wenn du dir die Dateien (zumindest deren Anfang) im Hexeditor (zur Not auch im Text-Editor) anschaust? Sind die Dateigrößen unterschiedlich oder sonstige Auffälligkeiten im Eigenschaftsdialog zu sehen?
» Hast du die Hinweise im PHP-Handbuch zu fpassthru() beachtet?
Was ist mit diesem Hinweis?
echo "$verabschiedung $name";
Hallo Dedlfix,
Gibt es Unterschiede, wenn du dir die Dateien (zumindest deren Anfang) im Hexeditor (zur Not auch im Text-Editor) anschaust? Sind die Dateigrößen unterschiedlich oder sonstige Auffälligkeiten im Eigenschaftsdialog zu sehen?
Ja, Firefox 28469 Byte und IE6 28358 Byte.
» Hast du die Hinweise im PHP-Handbuch zu fpassthru() beachtet?
Ja, habe ich.
Gruß
Tach,
header('content-type: application/x-zip");
ist der korrekte MIME-Type nicht "application/zip" ?
mfg
Woodfighter