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


PHP .ZIP object - str_replace folder path?

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

该目录的路径是:

/temp/useremail/

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

用户电子邮件/

我尝试使用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();

使用str_replace的方法确实有效,但您犯了一个简单的错误。在行中:

$zip->addFile(realpath($_key),$_key,或die("错误:无法添加文件:$key");

要修复它,只需将addFile的第一个参数one保留为$key(这是文件在系统中的较长路径/真实位置),将第二个参数(zip档案中的新路径)保留为edited!

$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();

就是这样!