Hi,
ich habe in meiner Webpräsens mehrere Bildergalerien, die ich auf Wunsch in eine Zip-Datei packe und zum download anbieten will.
Das zippen soll "on-the-fly" pssieren, damit das Archiv einerseits nicht unnötig Webspace verschlingt und andererseits ändern sich die Galerien von Zeit zu Zeit.
Mein Co-Webmaster hat jetzt vor einer Woche ein Skript geschrieben, was genau das erledigen soll. Es benutzt eine Zip-Klasse, die die Dateien packen und als Download anbieten soll. Bei ihm klappt das ganze und er bekommt einen ordentlichen Dateidownload im Browser.
Bei mir hingegen (und auch bei einer anderen Testperson) läd der Browser (was ich anhand des Netzwerkmonitors sehe) zimlich viele Byte und zeigt im Browserstatus "loading" oder "transfering" an. Nach einiger Zeit kommt dann auch der Downloaddialog in meinem Browser und ich kann festlegen, wo das Archiv gespeichert werden soll. Ich wähle darauf hin den Speicherort und sofort ist der Download beendet. Das Archiv hat dann bei mir die größe von 0 Byte.
Da ich mich heute damit etwas befasst habe, um das Problem zu lösen, habe ich einfach mal eine andere Zip-Klasse genommen. Das Ergebnis ist leider das gleiche.
Hatte jemand schon mal das gleiche Problem?
Damit ihr mir besser helfen könnt, habe ich etwas Code rausgesucht von meinem gedöns.
1. Im Dateianhang ist die Klasse, die ich verwende.
2. Der Benutzer ruft eine Seite auf, die folgenden Code beinhaltet:
Dieser Code hier drüber ruft eine Funktion in der Klasse "Bilder" auf der so aussieht. Dieser Code verwendet die Zip-Klasse um das Archiv damit zu erzeugen.
Ich hoffe mir kann jemand helfen, wieso das runtergeladene Archiv 0 Byte groß ist.
ich habe in meiner Webpräsens mehrere Bildergalerien, die ich auf Wunsch in eine Zip-Datei packe und zum download anbieten will.
Das zippen soll "on-the-fly" pssieren, damit das Archiv einerseits nicht unnötig Webspace verschlingt und andererseits ändern sich die Galerien von Zeit zu Zeit.
Mein Co-Webmaster hat jetzt vor einer Woche ein Skript geschrieben, was genau das erledigen soll. Es benutzt eine Zip-Klasse, die die Dateien packen und als Download anbieten soll. Bei ihm klappt das ganze und er bekommt einen ordentlichen Dateidownload im Browser.
Bei mir hingegen (und auch bei einer anderen Testperson) läd der Browser (was ich anhand des Netzwerkmonitors sehe) zimlich viele Byte und zeigt im Browserstatus "loading" oder "transfering" an. Nach einiger Zeit kommt dann auch der Downloaddialog in meinem Browser und ich kann festlegen, wo das Archiv gespeichert werden soll. Ich wähle darauf hin den Speicherort und sofort ist der Download beendet. Das Archiv hat dann bei mir die größe von 0 Byte.
Da ich mich heute damit etwas befasst habe, um das Problem zu lösen, habe ich einfach mal eine andere Zip-Klasse genommen. Das Ergebnis ist leider das gleiche.
Hatte jemand schon mal das gleiche Problem?
Damit ihr mir besser helfen könnt, habe ich etwas Code rausgesucht von meinem gedöns.
1. Im Dateianhang ist die Klasse, die ich verwende.
2. Der Benutzer ruft eine Seite auf, die folgenden Code beinhaltet:
PHP-Code:
include('Homepage/Index-Skripte/bilder.php');
$bilder = new bilder(0);
$bilder->item = 12;
$bilder->make_zip_from_gallery();
PHP-Code:
function make_zip_from_gallery()
{
global $db;
include('Homepage/Index-Skripte/zip_lib.php');
//
//Errorreport aus sonst zermatscht es das .zip
//
error_reporting(NIX);
//
//Speicherlimit hochsetzen, sonst passt die Zipfile nicht in den Speicher
//
ini_set("memory_limit","100M");
//
// Einlesen der Daten zur Bildergalerie
//
$sql = 'SELECT name FROM '.BILDERGALERIEN_TABLE.' WHERE galerie_id = '.$this->item;
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR,'Bildergalerie-Informationen konnten nicht geladen werden.','',__LINE__,__FILE__,$sql);
}
$galeriename_in_zip = $db->sql_fetchrow($result);
//
// Galerienamen als Dateinamenprefix DOS-konform machen
//
$galeriename_in_zip = strtolower(stripslashes($galeriename_in_zip['name']));
$galeriename_in_zip = str_replace('/', ' ', $galeriename_in_zip);
$galeriename_in_zip = str_replace('\\', ' ', $galeriename_in_zip);
$galeriename_in_zip = str_replace('|', ' ', $galeriename_in_zip);
$galeriename_in_zip = str_replace('<', ' ', $galeriename_in_zip);
$galeriename_in_zip = str_replace('>', ' ', $galeriename_in_zip);
$galeriename_in_zip = str_replace(':', ' ', $galeriename_in_zip);
$galeriename_in_zip = str_replace('*', ' ', $galeriename_in_zip);
$galeriename_in_zip = str_replace('?', ' ', $galeriename_in_zip);
$galeriename_in_zip = str_replace('"', ' ', $galeriename_in_zip);
$galeriename_in_zip = str_replace('ä', 'ae', $galeriename_in_zip);
$galeriename_in_zip = str_replace('ü', 'ue', $galeriename_in_zip);
$galeriename_in_zip = str_replace('ö', 'oe', $galeriename_in_zip);
$galeriename_in_zip = str_replace('ß', 'ss', $galeriename_in_zip);
//
// Einlesen aller Bilder zur Bildergalerie
//
$sql = 'SELECT datei FROM '.BILDER_TABLE.' WHERE bild_id IN ('.implode(',',$this->get_images()).')';
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR,'Bilder konnten nicht geladen werden.','',__LINE__,__FILE__,$sql);
}
//
// Neues Archiv initialisieren
//
$zipfile = new zipfile();
$subfix = 0;
while($daten = $db->sql_fetchrow($result))
{
$subfix++;
//
// Alle Dateien in das Zip-Archiv packen.
//
if (!is_readable('Homepage/Bildergalerien/'.$daten['datei']))
{
message_die(GENERAL_ERROR,'Fehler beim packen des Bildes '.$daten['datei'].' - Bild konnte nicht geladen werden.','',__LINE__,__FILE__,$sql);
}
$open = fopen('Homepage/Bildergalerien/'.$daten['datei'],'rb');
$file_data = fread($open,filesize('Homepage/Bildergalerien/'.$daten['datei']));
fclose($open);
$zipfile->addfile($file_data,'Bild_'.$subfix.strrchr($daten['datei'],'.'));
}
//
// Das Archiv an den Browser senden
//
header("Content-type: application/zip");
header("Content-disposition: attachment; filename=".urlencode($galeriename_in_zip).".zip");
print $zipfile->file();
exit;
}
Kommentar