2017-02-11 77 views
1

我想排除某些文件,如index.php被添加到由下面的代碼生成的zip文件中。我嘗試了一些方法,但都沒有工作。 請仔細閱讀並幫助我。如何排除某些文件夾被添加到由php生成的zip文件中

$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 
    } 
} 
相關問題