任何人都有这个zip脚本的想法?

时间:2012-12-15 15:33:55

标签: php archive

这是我用来将文件夹(名称在$id变量中)放入档案中的脚本。

$sourcefolder="../uploads/fail/$id/";
$zipfilename="fordownload/$id.zip";
$timeout=5000;
$dirlist = new RecursiveDirectoryIterator($sourcefolder);
$filelist = new RecursiveIteratorIterator($dirlist);
ini_set('max_execution_time', $timeout);
$zip = new ZipArchive();
if ($zip->open("$zipfilename", ZipArchive::CREATE) !== TRUE) {
    die ("Error");
}
foreach ($filelist as $key=>$value)
{
    $zip->addFile(realpath($key), $key) or die ("Error");
}
$zip->close();
redict("$zipfilename",0);

问题是我只想将文件夹$id放在档案中,没有前缀../uploads/fail/,但我不知道如何。你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

所以,这是代码的核心:

$dirlist = new RecursiveDirectoryIterator($sourcefolder);
$filelist = new RecursiveIteratorIterator($dirlist);
$zip = new ZipArchive();
foreach ($filelist as $key => $value) {
    $zip->addFile(realpath($key), $key) or die ("Error");
}

您正在调用RecursiveDirectoryIteratorFilesystemIterator,其本身是DirectoryIterator。在foreach内,$valueSplFileInfo

我们的第一枪就是:

foreach ($filelist as $path => $fileinfo) {
    $zip->addFile($fileinfo->getRealPath(), $fileinfo->getBasename()) or die ("Error");
}

getRealPath返回realpath所做的相同内容,而getBasename只返回文件名本身,就像basename一样。

但是,这不会按预期工作。看,它是一个递归目录迭代器,这会使子目录中任何文件的路径变得扁平。如果你不能自己破解它,我会在一段时间后回来编辑一个解决方案。