2017-02-11 15 views
1

Я хочу, чтобы определенные файлы, такие как index.php, были добавлены в zip, который генерируется кодом ниже. Я пробовал несколько способов, но никто не работал. Пожалуйста, просмотрите его и помогите мне.Как исключить некоторые папки из ZIP-файла, созданного php

$dir = './archive/'; 
$zip_file = 'All-file.zip'; 

// Get real path for our folder 
$rootPath = realpath($dir); 

// Initialize archive object 
$zip = new ZipArchive(); 
$zip->open($zip_file, ZipArchive::CREATE | ZipArchive::OVERWRITE); 

// Create recursive directory iterator 
/** @var SplFileInfo[] $files */ 
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath), 
    RecursiveIteratorIterator::LEAVES_ONLY 
); 

foreach ($files as $name => $file){ 
    // Skip directories (they would be added automatically) 
    if (!$file->isDir()){ 
     // Get real and relative path for current file 
     $filePath = $file->getRealPath(); 
     $relativePath = substr($filePath, strlen($rootPath) + 1); 

     // Add current file to archive 
     $zip->addFile($filePath, $relativePath); 
    } 
} 

// Zip archive will be created only after closing object 
$zip->close(); 

header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename='.basename($zip_file)); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($zip_file)); 
readfile($zip_file); 

ответ

0
$exclusions=array('index.php'); // add more filenames to exclusion array as needed 
foreach($files as $name=>$file){ 
    // only process non-directories && non-excluded files 
    if(!$file->isDir() && !in_array($file->getFilename(),$exclusions)){ 
     $filePath = $file->getRealPath(); // Get real and relative path for current file 
     $relativePath = substr($filePath, strlen($rootPath) + 1); 
     $zip->addFile($filePath, $relativePath); // Add current file to archive 
    } 
}