Skocz do zawartości
Zaloguj się, aby obserwować  
kszere

Pakowanie plików do archiwum zip

Polecane posty

Poniżej przedstawiam kod skryptu pakowania plików do archiwum zip

Niestety gdzieś jest błąd i każdy folder oznacza jako niedozwolony, a jeśli ustawi się na sztywno jeden bez array to po zapakowaniu i pobraniu pliku nie można go rozpoznać (System nie może rozpoznać pliku).

<?php
error_reporting(E_ERROR | E_PARSE);
define('ZIPDIR', 'zippeds/');
 
$allowed_dirs = array (
        'download/files',
		'materały/download/foto'
);
 
if (!empty($_GET['dir'])) {
        $dirname = basename($_GET['dir']);
       
        if (array_search($dirname, $allowed_dirs) == FALSE) {
                die('BŁĄD: Ten katalog nie jest dozwolony!');
        }
       
        if (!is_dir($dirname)) {
                die('BŁĄD: Podany katalog nie istnieje!');
        }
} else {
        die('BŁĄD: Nie podano nazwy katalogu.');
}
 
$filelist = array();
 
$dir=opendir($dirname);
 
while(($nazwa_pliku = readdir($dir)) !== false)
{
if(($nazwa_pliku!=".") && ($nazwa_pliku!=".."))
{
$filelist[] = "$dirname/$nazwa_pliku";
}
}
closedir($dir);
 
function create_zip($files = array(),$destination = '',$overwrite = false) {
  if(file_exists($destination) && !$overwrite) { return true; }
  $valid_files = array();
  if(is_array($files)) {
    foreach($files as $file) {
      if(file_exists($file)) {
        $valid_files[] = $file;
      }
    }
  }
  if(count($valid_files)) {
    $zip = new ZipArchive();
    if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
      return false;
    }
    foreach($valid_files as $file) {
      $zip->addFile($file,$file);
    }
   
    $zip->close();
   
    return file_exists($destination);
  }
  else
  {
    return false;
  }
}
 
$dest = ZIPDIR . md5($dirname) . '.zip';
 
$result = create_zip($filelist, $dest);
 
header('Content-Type: application/zip');
header('Content-Length: ' . filesize($dest));
header('Content-Disposition: attachment; filename=' . $dirname . '.zip');
 
readfile($dest);
echo file_get_contents($dest); 
?>

 

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×