HTML download Ordner?


15.02.2022, 00:23
Hier die lösung falls die jemand sucht ;D

<?php 
// Create ZIP file
if(isset($_GET['file']) && isset($_GET['path'])){
    echo 'success';
	$zip = new ZipArchive();
    $filename = $_GET['file'];


    if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
      exit("cannot open <$filename>\n");
    }


    $dir = $_GET['path'];
    // Create zip
    createZip($dir, $zip);


    $zip->close();
  
	if (file_exists($filename)) {
		header('Content-Type: application/zip');
		header('Content-Disposition: attachment; filename="'.basename($filename).'"');
		header('Content-Length: ' . filesize($filename));


		flush();
		readfile($filename);
		// delete file
		unlink($filename);
	}   
}




function CreateZip($path, $zip)
{
	$dir_handle = @opendir($path);
	$items = array();
	while(false !== ($item = readdir($dir_handle)))
	{
		$dir = $path . '/' . $item;
		if($item == '.' || $item == '..')
		{
			continue;
		}
				
		if(is_dir($dir))
		{
			CreateZip($dir, $zip);
		}
		else
		{
			$zip->addFile($dir);
		}
	}
}
?>
malte314  14.02.2022, 22:07

Meinst Du damit, dass Du willst, dass ein Link zum Download eines Ordners führt?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du kannst die ZIP Extension nutzen, um auf Anfrage alle Dateien des jeweiligen Verzeichnisses in eine ZIP-Datei zu packen.

Sobald die ZIP-Datei angelegt wurde, kannst du sie als Response an den Client zurückschicken. Ungefähr so:

$path = '/path/to/your/file.zip';

header('Content-Type: application/zip');
header("Content-Disposition: attachment; filename={basename($path)}");
header("Content-Length: {filesize($path)}");

readfile($path);
Von Experte MrAmazing2 bestätigt

Gar nicht. Ein Verzeichnis kann man nicht herunterladen. Du kannst einzeln auf die jeweils darin liegenden Dateien verlinken, oder Du bündelst diese und bietest sie zB als ZIP-Archiv gepackt als Download an.

Woher ich das weiß:Berufserfahrung – selbstständiger Dienstleister und Nerd
HitsLikeZocker 
Fragesteller
 14.02.2022, 22:10

Weißt du auch wie ich mehrere Dateien zu einem Zip-Archive komprimieren kann in HTML? LG

0
malte314  14.02.2022, 22:13
@HitsLikeZocker

In HTML gar nicht, aber unter Windows kannst Du die Dateien bzw. den Ordner auswählen und im Rechts-Klick-Menu "komprimieren" oder so ähnlich anklicken (unter macOS ginge das auch genau so)

1
Limearts  14.02.2022, 22:17
@HitsLikeZocker

In HTML gar nicht. Jedenfalls nicht ohne erheblichen Mehraufwand durch Programmierung entsprechender Skripte mit anderen Sprachen.

Sinnigerweise packt man die Dateien am entsprechenden Gerät, ehe man das so erstellte ZIP-Archiv hochlädt. Windows, im Grunde alle Linux-Distributionen und MacOS haben entsprechende Werkzeuge bereits in ihren Kontextmenüs verbaut, wenn man mehrere Dateien anwählt. Die Befehle dafür lauten grob "An ZIP-Archiv senden" "als ZIP-Archiv komprimieren" oder so Ähnlich. Für Android und iOS müsste man eine geeignete App nachinstallieren.

1