Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Download di un file zip contenente vari file

    Salve a tutti. Devo far in modo di creare un insieme di file a seconda del contenuto di una
    tabella MySQL e di farli scaricare tutti in un unico file zip. Sono un neofita in php e quello che sto facendo ora non funziona poiché il file zip che scarico risulta corrotto/non valido.

    Questo è il mio attuale approccio:

    codice:
    // 1) dammi tutti gli imei
    $imeis = array();
    $stmt = $pdo->prepare("SELECT imei FROM users");
    if ($stmt->execute()) {
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $imeis[] = $row["imei"];
        }
    } else {
        die("error getting imeis");
    }
    // 2) per ogni imei, prendi tutte le sue azioni e mettile in un file
    $files = array();
    foreach ($imeis as $imei) {
    
    
        // contenuto file corrente
        $current_file = "";
    
    
        $stmt = $pdo->prepare("SELECT actions FROM phones_actions "
                . "WHERE phones=:imei");
        $stmt->bindParam(":imei", $imei, PDO::PARAM_STR);
        
        if ($stmt->execute()) {
            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                $action = $row["actions"];
                $current_file .= $action . "\r\n";
            }
        } else {
            die("error getting imeis");
        }
        
        print_r($current_file);
        
        $myfile = fopen($imei . ".txt", "w") or die("Unable to open file!");
        fwrite($myfile, $current_file);
        fclose($myfile);
        
        $files[] = $myfile;
        
        // reset current file
        $current_file = "";
    }
    
    
    // create zip file
    $zipname = 'users_actions.zip';
    $zip = new ZipArchive;
    $zip->open($zipname, ZipArchive::CREATE);
    foreach ($files as $file) {
      $zip->addFile($file);
    }
    $zip->close();
    
    
    // download zip file
    header('Content-Type: application/zip');
    header('Content-disposition: attachment; filename='.$zipname);
    header('Content-Length: ' . filesize($zipname));
    readfile($zipname);
    
    
    $pdo = null;

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2015
    residenza
    TORINO
    Messaggi
    37
    Ciao,
    Il problema è questa riga:
    $files[] = $myfile;
    Stai mettendo nell'array non il nome del file da zippare ma il resource id che php ha creato per farci riferimento.
    Devi aggiungere il nome del file :
    $files[] =$imei . ".txt";

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.