InternInhaltsverzeichnisGlossarBausteineLinklisteTutorialsKommentare
Thema: PHP - Zip-Archiv erstellen und Datei herunterladen

👤 CarSiMir ✶✶✶✶✶ schrieb am Mittwoch, den 22 Januar 2020 zum Thema: PHP - Zip-Archiv erstellen und Datei herunterladen #1
Danke für das super Script. Ich habe festgestellt, dass es bei größeren Ordnern Schwierigkeiten gibt die in eine zip File zu packen. Es erscheint nach kurzer Zeit "500 Internal Server Error". Gibt es eine ähnliche Lösung für größere Ordner?

Gruß CarSiMir
👤 Werner schrieb am Mittwoch, den 22 Januar 2020 zum Thema: PHP - Zip-Archiv erstellen und Datei herunterladen #2
Meistens ist dann die Zeit in dem das Script ausgeführt wird zu kurz dann erscheint ein "500 Internal Server Error".
Mit: echo ini_get('max_execution_time'); kannst du die Zeit in Sekunden anzeigen lassen die in der php.ini eingestellt ist.
Für das Script kannst du die Zeit erhöhen: ini_set('max_execution_time', '120');
👤 amsel schrieb am Sonntag, den 19 September 2021 zum Thema: PHP - Zip-Archiv erstellen und Datei herunterladen #3
habe das Script erfolreich einbauen können habe nur ein prob und muste es etwas abändern

// Zip-Archiv erstellen und Datei herunterladen

// Beachten Sie, das hiermit keine Verzeichnisse gelesen
// werden können die ihrerseits Verzeichnisse enthalten!
$verzeichnis = ($GLOBALS["IMGHOST_PIC_DIR"]);
$zip_name = $GLOBALS["IMGHOST_PIC_ZIP"]."/".$CURUSER['id']."-image.zip";

// Verzeichnis auslesen
$dateien = strval(("/pic-".$data['name'].$endu));

// Neue Instanz der ZipArchive Klasse erzeugen
$zip = new ZipArchive;

// Zip-Archiv erstellen
$status = $zip->open($zip_name, ZipArchive::CREATE);

if ($status === TRUE) {

// Dateien ins Zip-Archiv einfügen
$zip->addFile($verzeichnis . $dateien, $dateien);

// Zip-Archiv schließen
$zip->close();

if ((file_exists($zip_name))) {
echo '<p><a href="' . $zip_name . '">' . $zip_name . '</a></p>';
}
}
wenn ich das scipt so ausführe funzt es aber es macht mir bei
echo '<p><a href="' . $zip_name . '">' . $zip_name . '</a></p>';
mehrere untereinander und nicht nur ein Button wie es in dem Script steht hat wer eine Idee was ich da machen kann.

mfg amsel
👤 Werner schrieb am Sonntag, den 19 September 2021 zum Thema: PHP - Zip-Archiv erstellen und Datei herunterladen #4
Ungetestet:

1
2
3
4
5
6
7
8
<?php
// ...
$var "";
if ((
file_exists($zip_name))) {
 
$var '<p><a href="' $zip_name '">' $zip_name '</a></p>';
}
echo 
$var;
?>
👤 amsel schrieb am Sonntag, den 19 September 2021 zum Thema: PHP - Zip-Archiv erstellen und Datei herunterladen #5
Thx für ihre Antwort leider immer noch das selbe
user_uploads/img-host/1-image.zip

SPAM

mfg amsel
👤 Werner schrieb am Montag, den 20 September 2021 zum Thema: PHP - Zip-Archiv erstellen und Datei herunterladen #6
Ein Dateiname darf unter Windows keinen Schrägstrich (Slash) enthalten!

Es soll also nur eine Datei in ein Zip-Archiv gelegt werden?
Warum wird das Script so oft aufgerufen, mache mal nach der Ausgabe ein: exit;

Zitat:
$dateien = strval(("/pic-".$data['name'].$endu));
Auch hier ist wieder ein Slash drin!
Meine Lösung mit einer Datei im Archiv:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
// Zip-Archiv erstellen und Datei herunterladen

// Beachten Sie, das hiermit keine Verzeichnisse gelesen
// werden können die ihrerseits Verzeichnisse enthalten!
$verzeichnis "neu/";
$zip_name "beispiel2.zip";

// Dateiname
$datei = ("bild.jpg");

// Neue Instanz der ZipArchive Klasse erzeugen
$zip = new ZipArchive;

// Zip-Archiv erstellen
$status $zip->open($zip_nameZipArchive::CREATE);

if (
$status === TRUE) {

 
// Dateien ins Zip-Archiv einfügen
 
$zip->addFile($verzeichnis $datei$datei);
 
 
// Zip-Archiv schließen
 
$zip->close();
 
 if ((
file_exists($zip_name))) {
 echo 
'<p><a href="' $zip_name '">' $zip_name '</a></p>';
 }
}
?>


$zip->addFile($verzeichnis . $datei, $datei);

$datei = Originalname
$datei = Geänderter Name!

$zip->addFile($verzeichnis . $datei, "pic-0815.jpg");
👤 amsel schrieb am Montag, den 20 September 2021 zum Thema: PHP - Zip-Archiv erstellen und Datei herunterladen #7
Guten Abend so erstelle ich das ZIP die daten vom User werden über eine foreach schleife über geben
leider hatte ich bei $zip->addFile($verzeichnis . $dateien, $dateien); eine array to string conversion das selbe auch hier $dateien = array(scandir(strval($verzeichnis)),"/pic-".$data['name'].$endu); deshalb hatte ich das etwas abgeändert

<?php
if(isset($_GET['action']) AND $_GET['action'] == 'zip_complete'){
$result = $db -> queryObjectArray('img_host', array('*'), "WHERE user = '".$CURUSER['id']."' ");
if (is_array($result) || is_object($result)){
foreach($result as $data){
if($data['gif'] == 'yes'){$endu = '.gif';}else{$endu = '.jpg';}

// Zip-Archiv erstellen und Datei herunterladen

// Beachten Sie, das hiermit keine Verzeichnisse gelesen
// werden können die ihrerseits Verzeichnisse enthalten!
$verzeichnis = ($GLOBALS["IMGHOST_PIC_DIR"]);
$zip_name = $GLOBALS["IMGHOST_PIC_ZIP"]."/".$CURUSER['id']."-image.zip";

// Verzeichnis auslesen
$dateien = strval(("/pic-".$data['name'].$endu));
#$dateien = array(scandir(strval($verzeichnis)),"/pic-".$data['name'].$endu);
// Neue Instanz der ZipArchive Klasse erzeugen
$zip = new ZipArchive;

// Zip-Archiv erstellen
$status = $zip->open($zip_name, ZipArchive::CREATE);

if ($status === TRUE) {

// Dateien ins Zip-Archiv einfügen
#if (is_array($dateien) || is_object($dateien)){
# foreach ($dateien as $datei) {

$zip->addFile($verzeichnis . $dateien, $dateien);
#}
#}
// Zip-Archiv schließen
$zip->close();
if (file_exists($zip_name)) {
echo '<p><a href="' . $zip_name . '">' . $zip_name . '</a></p>';
}
?>

mfg amsel
👤 Werner schrieb am Dienstag, den 21 September 2021 zum Thema: PHP - Zip-Archiv erstellen und Datei herunterladen #8
Hallo,
ein ziemliches Durcheinander
Wo wird die foreach-Schleife wieder geschlossen?

foreach($result as $data){

Setze oben in die erste Zeile:

error_reporting(E_ALL);
ini_set('display_errors', true);
👤 amsel schrieb am Mittwoch, den 22 September 2021 zum Thema: PHP - Zip-Archiv erstellen und Datei herunterladen #9
Guten Abend Werner,
über if (file_exists($zip_name))

hatte die beiden } oben ausgeklammert gehabt beim kopieren vom Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
if(isset($_GET['action']) AND $_GET['action'] == 'zip_complete'){
    
$result $db -> queryObjectArray('img_host', array('*'), "WHERE user = '".$CURUSER['id']."' ");
    if (
is_array($result) || is_object($result)){ 
        foreach(
$result as $data){
            if(
$data['gif'] == 'yes'){$endu '.gif';}else{$endu '.jpg';}

            
## Zip-Archiv erstellen und Datei herunterladen

            ## Beachten Sie, das hiermit keine Verzeichnisse gelesen
            ## werden können die ihrerseits Verzeichnisse enthalten!
            
$verzeichnis = ($GLOBALS["IMGHOST_PIC_DIR"]);
            
$zip_name $GLOBALS["IMGHOST_PIC_ZIP"]."/".$CURUSER['id']."-image.zip";

            
## Verzeichnis auslesen
            
$dateien strval(("/pic-".$data['name'].$endu));
            
## Neue Instanz der ZipArchive Klasse erzeugen
            
$zip = new ZipArchive;

            
## Zip-Archiv erstellen
            
$status $zip->open($zip_nameZipArchive::CREATE);

            if (
$status === TRUE) {
                
## Dateien ins Zip-Archiv einfügen
                
$zip->addFile($verzeichnis $dateien$dateien); 
                
## Zip-Archiv schließen
                
$zip->close();
            }
                
##test ende 
        
}
    }
        if (
file_exists($zip_name)) { 
                echo 
'<p><a href="' $zip_name '">' $zip_name '</a></p>'
        } exit;
}
?>

Soweit hab ich es jetzt hinbekommen, es kommt nur noch ein Download Bouton. Aber durch das EXIT macht er danach eine Weiße Seite mit dem Download Bouton.

mfg amsel
👤 Werner schrieb am Donnerstag, den 23 September 2021 zum Thema: PHP - Zip-Archiv erstellen und Datei herunterladen #10
Ich habe immer noch Schwierigkeiten dein Script zu verstehen!
Bei jedem foreach-Durchlauf wird die Variable: $zip_name überschrieben. Ist das so richtig, und am Ende soll nur eine Datei heruntergeladen werden?

Zitat:
Aber durch das EXIT macht er danach eine Weiße Seite mit dem Download Bouton.


1
2
3
4
5
        if (file_exists($zip_name)) { 
          echo '<html> blabla';
             echo '<p><a href="' . $zip_name . '">' . $zip_name . '</a></p>'; 
          echo '</html>';
        } exit;