PHP .ZIP对象 - str_replace文件夹路径?

时间:2012-03-03 12:27:23

标签: php zip str-replace

我正在运行一个脚本,在请求时ZIP是用户个人目录。

该目录的路径是:

../温度/ USEREMAIL /

实际下载ZIP时,这也是文件夹路径在其中的显示方式(显然看起来很糟糕)。我希望它简单地显示为:

USEREMAIL /

我尝试使用str_replace但它无效。这是我的代码:

$zip = new ZipArchive();


$exists = file_exists('../temp/' . $email . '/theme-' . $email . '.zip');
$delete = '../temp/' . $email . '/theme-' . $email . '.zip';

if($exists) {
    unlink($delete);
}

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

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("../temp/$email/"));

foreach ($iterator as $key => $value) {
    $_key = str_replace("../temp/'.$email.'/", "", $key);
    $zip->addFile(realpath($_key), $_key) or die("ERROR: Could not add file: $key");
}

$zip->close();

1 个答案:

答案 0 :(得分:1)

使用str_replace执行此操作的方式确实有效,但您犯了一个简单的错误。 在这一行:

$ zip-> addFile(realpath($ _ key),$ _key)或die(“ERROR:无法添加文件:$ key”);

要修复它,只需将addFile的第一个参数保留为$ key(系统中文件的较长路径/实际位置)和第二个参数(zip存档中的新路径)作为编辑! / p>

$zip = new ZipArchive();


$exists = file_exists('../temp/' . $email . '/theme-' . $email . '.zip');
$delete = '../temp/' . $email . '/theme-' . $email . '.zip';

if($exists) {
    unlink($delete);
}

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

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("../temp/$email/"));

foreach ($iterator as $key => $value) {
    $_key = str_replace("../temp/'.$email.'/", "", $key);
    $zip->addFile(realpath($key), $_key) or die("ERROR: Could not add file: $key");
}

$zip->close();

就是这样!