PROBLEMA Download zip file tramite PHP

syscall

Nuovo Utente
6
1
Salve, vorrei implementare una funzione che mi permetta di scaricare -in un file zip- un'intera directory contenente files. Lo script che ho utilizzato è il seguente; manca solo degli header che forzano il download del file zip appena creato. Il problema è che mi crea un zip con nome corretto, "peso" corretto ma una volta scaricato appare completamente vuoto. Sapreste darmi una mano a risolvere? Grazie mille.
<?$user=$_GET['user'];
// increase script timeout value
ini_set("max_execution_time", 300);
// create object
$zip = new ZipArchive();
// open archive
if ($zip->open("my-archive.zip", ZIPARCHIVE::CREATE) !== TRUE) {
die ("Could not open archive");
}
// initialize an iterator
// pass it the directory to be processed
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("./uploads/$user"));
// iterate over the directory
// add each file found to the archive
foreach ($iterator as $key=>$value) {
$zip->addFile($key) or die ("ERROR: Could not add file: $key");
}
// close and save archive
$zip->close();
echo "Archive created successfully.";
?>
 
M

Mursey

Ospite
Aggiungi qualche echo di debug nel foreach cosi' vedi se vengono letti tutti i files correttamente.
 
  • Mi piace
Reazioni: syscall

syscall

Nuovo Utente
6
1
Ecco qui, pare che li legga ma non riesco a capire cosa siano i file /.. e /. :grat:
Cattura1.PNG
Forse sono proprio quei due a causare il problema. Provo a mettere un if e vedo se riesco a risolvere così.
 
Ultima modifica:
M

Mursey

Ospite
Quelli sono i classici folder che fungono da comandi dos, devi escluderli in qualche modo.
 
  • Mi piace
Reazioni: syscall

syscall

Nuovo Utente
6
1
Ecco qui finalmente ho risolto i due problemi: il primo, quello riguardo /.. e /. mettendo un controllo; il secondo, l'ho risolto per intuito, provando ad aggiungere il localname nella funzioe addFile() (il bello è che sul manuale di PHP il localname viene dato per opzionale, PHP: ZipArchive::addFile - Manual) e da lì ha funzionato. Grazie per i consigli. Ecco il codice:
Codice:
<?php$user=$_GET['user'];
// increase script timeout value
ini_set("max_execution_time", 300);
// create object
$zip = new ZipArchive();
// open archive
if ($zip->open("my-archive.zip", ZIPARCHIVE::CREATE) !== TRUE) {
die ("Could not open archive");
}
$myDirectory = opendir("./uploads/".$user);
while($entryName = readdir($myDirectory)) {
  $dirArray[] = $entryName;
}
closedir($myDirectory);


$indexCount = count($dirArray);


for($index=0; $index < $indexCount; $index++) {
  if (substr("$dirArray[$index]", 0, 1) != "."){
      $path="./uploads/$user/".$dirArray[$index];
    $zip->addFile($path) or die ("ERROR: Could not add file: $dirArray[$index]");
    //debug
    print "File: $dirArray[$index]---Path: $path<br>";
  }
}


$zip->close();
echo "Archive created successfully.";
?>
 
Ultima modifica:
  • Mi piace
Reazioni: Mursey

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili