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;