【问题标题】:Anyone have ideas for this zip script?有人对这个 zip 脚本有想法吗?
【发布时间】:2012-12-15 15:33:54
【问题描述】:

这是我用来将文件夹(名称位于 $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/,但我不知道如何。你能帮忙吗?

【问题讨论】:

    标签: php archive


    【解决方案1】:

    所以,这是您代码的核心:

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

    您正在调用一个RecursiveDirectoryIterator,它是一个FilesystemIterator,它本身就是一个DirectoryIterator。在你的foreach$value 里面是一个SplFileInfo

    我们的第一个镜头是这样的:

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

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

    但是,这不会按预期工作。看,它是一个 recursive 目录迭代器,这会展平子目录中任何文件的路径。如果您无法自行破解,我稍后会回来编辑解决方案。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 2014-10-13
    • 2017-09-02
    • 2016-07-14
    相关资源
    最近更新 更多