2016-06-15 20 views
0

Ich habe dieses Skript, um alle Dateien als zip aus der Datenbank herunterladen, aber es wird nur die erste Datei in der Datenbank gespeichert - die anderen nicht angezeigt.PHP-Code zum Komprimieren aller Dateien als zip funktioniert jetzt

Im Folgenden finden Sie eine Liste der Dateien, die ich in der Datenbank, die ich in der Zip enthalten sein soll:

lginin 

logersutil.php 

lgininh.js 

Readme.md 

Und mein Code:

<?php 
if(isset($_POST['download'])){ 
try{ 
$db_conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USERNAME,DB_PASSWORD); 
$db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$post_stmt = $db_conn->prepare("SELECT * FROM jailorgchild WHERE jailchildbasname = :BasNameJa"); 
$post_stmt->bindParam(':BasNameJa', basename(dirname(__FILE__))); 
$post_stmt->execute(); 
while ($rowss = $post_stmt->fetch(PDO::FETCH_ASSOC)){ 

    $files = array(''.$rowss["jailchillink"].'','codejail.cj'); 

    # create new zip opbject 
    $zip = new ZipArchive(); 

    # create a temp file & open it 
    $tmp_file = tempnam('.',''); 
    $zip->open($tmp_file, ZipArchive::CREATE); 

    # loop through each file 
    foreach($files as $file){ 

     # download file 
     $download_file = file_get_contents($file); 

     #add it to the zip 
     $zip->addFromString(basename($file),$download_file); 

    } 

    # close zip 
    $zip->close(); 

    # send the file to the browser as a download 
    header('Content-disposition: attachment; filename='.basename(dirname(__FILE__)).'.zip'); 
    header('Content-type: application/zip'); 
    readfile($tmp_file); 

} }catch (PDOException $e){ echo 'Connection failed: ' . $e->getMessage();} 
} 
?> 

Antwort

0

In Ihrem aktuellen Code, Sie mache grundsätzlich 1 neue Zip-Datei und gebe sie für jede Zeile zurück. Da der Client nur 1 Antwort lesen kann, werden sie offensichtlich nie mehr als 1 Zeile sehen.

Also, was Sie tun müssen, ist sicherzustellen, dass Sie alle Dateien an die Zip vor senden Sie es senden. Wie so:

<?php 
if(isset($_POST['download'])){ 
    try{ 
     $db_conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USERNAME,DB_PASSWORD); 
     $db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $post_stmt = $db_conn->prepare("SELECT * FROM jailorgchild WHERE jailchildbasname = :BasNameJa"); 
     $post_stmt->bindParam(':BasNameJa', basename(dirname(__FILE__))); 
     $post_stmt->execute(); 

     // here we create a temporary array to hold all the filenames 
     // and fill it with the file you always want to have inserted 
     $files = array('codejail.cj'); 
     while ($rowss = $post_stmt->fetch(PDO::FETCH_ASSOC)){ 
      // now fill the array with your files 
      $files[] = $rowss['jailchillink']; 
     }   

     // and now we finally start processing them all, after having finished reading from the DB 
     # create new zip opbject 
     $zip = new ZipArchive(); 

     # create a temp file & open it 
     $tmp_file = tempnam('.',''); 
     $zip->open($tmp_file, ZipArchive::CREATE); 

     # loop through each file 
     foreach($files as $file){ 
      # download file 
      $download_file = file_get_contents($file); 

      #add it to the zip 
      $zip->addFromString(basename($file),$download_file); 
     } 

     # close zip 
     $zip->close(); 

     # send the file to the browser as a download 
     header('Content-disposition: attachment; filename='.basename(dirname(__FILE__)).'.zip'); 
     header('Content-type: application/zip'); 
     readfile($tmp_file); 

    } catch (PDOException $e){ 
     echo 'Connection failed: ' . $e->getMessage(); 
    } 

} >

+0

erhalte ich diese Fehlermeldung 'Warnung: PDO :: __ construct(): php_network_getaddresses: getaddrinfo failed: No such Host bekannt ist. in C: \ xampp \ htdocs \ www.codejail.com \ cjl \ Code_editor \ index.php in Zeile 375 Verbindung fehlgeschlagen: SQLSTATE [HY000] [2002] php_network_getaddresses: getaddrinfo fehlgeschlagen: Es ist kein solcher Host bekannt. ' – Frank

+0

Danke @Tularis Ihre Antwort hat mir geholfen, aber Sie haben Fehler beim Abrufen der Datei aus der Datenbank – Frank

+0

Sorry, kleiner Tippfehler im Abschnitt db-host; Das ging davon aus, dass Ihr DB-Verbindungscode korrekt ist. Ihre vorgeschlagene Bearbeitung ist genau das, was ich Ihnen zeigen wollte, dass Sie * nicht * tun sollten. Sie müssen den Zipping-Teil aus dem Abschnitt zum Abrufen der Datenbank entfernen. Zuerst alle Informationen erhalten und dann verarbeiten. – Tularis