使用php脚本压缩/存档文件夹

时间:2010-09-30 06:46:46

标签: php compression

有没有办法使用php脚本压缩/存档服务器中的文件夹.zip或.rar或任何其他压缩格式,以便我们可以根据请求归档文件夹,然后提供下载链接

提前致谢

3 个答案:

答案 0 :(得分:14)

以下是一个例子:

<?php

// Adding files to a .zip file, no zip file exists it creates a new ZIP file

// increase script timeout value
ini_set('max_execution_time', 5000);

// create object
$zip = new ZipArchive();

// open archive 
if ($zip->open('my-archive.zip', ZIPARCHIVE::CREATE) !== TRUE) {
    die ("Could not open archive");
}

// initialize an iterator
// pass it the directory to be processed
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("themes/"));

// iterate over the directory
// add each file found to the archive
foreach ($iterator as $key=>$value) {
    $zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key");
}

// close and save archive
$zip->close();
echo "Archive created successfully.";
?>

答案 1 :(得分:3)

请注意Adnan示例中可能存在的问题:如果目标myarchive.zip在源文件夹中,则需要在循环中将其排除,或者在创建归档文件之前运行迭代器(如果它没有'已存在)。这是一个使用后一个选项的修订脚本,并在顶部添加了一些配置变量。不应该使用此文件添加到现有存档。

<?php
// Config Vars 

$sourcefolder = "./"           ; // Default: "./" 
$zipfilename  = "myarchive.zip"; // Default: "myarchive.zip"
$timeout      = 5000           ; // Default: 5000

// instantate an iterator (before creating the zip archive, just
// in case the zip file is created inside the source folder)
// and traverse the directory to get the file list.
$dirlist = new RecursiveDirectoryIterator($sourcefolder);
$filelist = new RecursiveIteratorIterator($dirlist);

// set script timeout value 
ini_set('max_execution_time', $timeout);

// instantate object
$zip = new ZipArchive();

// create and open the archive 
if ($zip->open("$zipfilename", ZipArchive::CREATE) !== TRUE) {
    die ("Could not open archive");
}

// add each file in the file list to the archive
foreach ($filelist as $key=>$value) {
    $zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key");
}

// close the archive
$zip->close();
echo "Archive ". $zipfilename . " created successfully.";

// And provide download link ?>
<a href="http:<?php echo $zipfilename;?>" target="_blank">
Download <?php echo $zipfilename?></a> 

答案 2 :(得分:2)

PHP附带ZipArchive扩展程序,适合您。