Eh bien, tout d'abord, voici ma structure de dossiers:
images/
image1.png
image11.png
image111.png
image223.png
generate_Zip.php
Et voici le mien generate_Zip.php:
<?php
$files = array($listfiles);
$zipname = 'adcs.Zip';
$Zip = new ZipArchive;
$Zip->open($zipname, ZipArchive::CREATE);
foreach ($files as $file) {
$Zip->addFile($file);
}
$Zip->close();
header('Content-Type: application/Zip');
header("Content-Disposition: attachment; filename='adcs.Zip'");
header('Content-Length: ' . filesize($zipname));
header("Location: adcs.Zip");
?>
Comment rassembler tous les fichiers du dossier "images /", à l'exception de "generate_Zip.php", et en faire un .zip téléchargeable? Dans ce cas, le dossier "images /" a toujours une image différente. Est-ce possible?
cela garantira qu'aucun fichier avec l'extension .php ne sera ajouté:
foreach ($files as $file) {
if(!strstr($file,'.php')) $Zip->addFile($file);
}
edit: voici le code complet réécrit:
<?php
$zipname = 'adcs.Zip';
$Zip = new ZipArchive;
$Zip->open($zipname, ZipArchive::CREATE);
if ($handle = opendir('.')) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != ".." && !strstr($entry,'.php')) {
$Zip->addFile($entry);
}
}
closedir($handle);
}
$Zip->close();
header('Content-Type: application/Zip');
header("Content-Disposition: attachment; filename='adcs.Zip'");
header('Content-Length: ' . filesize($zipname));
header("Location: adcs.Zip");
?>
inclut tous les sous-dossiers:
new GoodZipArchive('path/to/input/folder', 'path/to/output_Zip_file.Zip') ;
au début, incluez ceci morceau de code .
Puisque vous avez juste besoin de fichiers spécifiques d'un répertoire pour créer ZipArchive, vous pouvez utiliser la fonction glob () pour ce faire.
<?php
$Zip = new ZipArchive;
$download = 'download.Zip';
$Zip->open($download, ZipArchive::CREATE);
foreach (glob("images/*.png") as $file) { /* Add appropriate path to read content of Zip */
$Zip->addFile($file);
}
$Zip->close();
header('Content-Type: application/Zip');
header("Content-Disposition: attachment; filename = $download");
header('Content-Length: ' . filesize($download));
header("Location: $download");
?>
N'utilisez pas glob () si vous essayez de lister les fichiers dans un répertoire où beaucoup de fichiers sont stockés (plus de 100 000). Vous obtenez une erreur "Taille de mémoire autorisée d'octets XYZ épuisés ...".
readdir () est de manière plus stable.
changez votre boucle foreach en ceci sauf generate_Zip.php
foreach ($files as $file) {
if($file != "generate_Zip.php"){
$Zip->addFile($file);
}
}
<?php
ob_start();
$Zip = new ZipArchive;
$Zip->open('sample.Zip', ZipArchive::CREATE);
$srcDir = "C:\\xampp\\htdocs\\uploads"; //location of the directory
$files= scandir($srcDir);
print_r($files); // to check if files are actually coming in the array
unset($files[0],$files[1]);
foreach ($files as $file) {
$Zip->addFile($srcDir.'\\'.$file, $file);
echo "bhandari";
}
$Zip->close();
$file='sample.Zip';
if (headers_sent()) {
echo 'HTTP header already sent';
} else {
if (!is_file($file)) {
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
echo 'File not found';
} else if (!is_readable($file)) {
header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden');
echo 'File not readable';
} else {
header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
header("Content-Type: application/Zip");
header("Content-Transfer-Encoding: Binary");
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=\"".basename($file)."\"");
while (ob_get_level()) {
ob_end_clean();
}
readfile($file);
exit;
}
}
?>`enter code here`
Remarque: N'oubliez pas d'utiliser ob_start (); et fin .