Php 在压缩并下载目录内容后,递归删除目录失败

Php 在压缩并下载目录内容后,递归删除目录失败,php,codeigniter,download,zip,recursiveiterator,Php,Codeigniter,Download,Zip,Recursiveiterator,我接着递归地删除了一个目录(见下面的代码)。问题是,在我压缩了目录的内容并下载了zip文件之后,我无法让这些命令执行它们的操作 文件/文件夹权限似乎不是问题,因为正如我所说的,如果不涉及文件夹压缩,代码就可以正常工作 有人有什么想法吗 $this->zip->download($file_name); //a Codeigniter function, though think it could be any function that executes the zip file d

我接着递归地删除了一个目录(见下面的代码)。问题是,在我压缩了目录的内容并下载了zip文件之后,我无法让这些命令执行它们的操作

文件/文件夹权限似乎不是问题,因为正如我所说的,如果不涉及文件夹压缩,代码就可以正常工作

有人有什么想法吗

$this->zip->download($file_name); //a Codeigniter function, though think it could be any function that executes the zip file download.

$dir='uploads/folder1'; 
//the contents of folder1 are "foo1.png" and "foo2.png"

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),  RecursiveIteratorIterator::CHILD_FIRST);

foreach ($files as $fileinfo) {
    $todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
    $todo($fileinfo->getRealPath());
}

rmdir($dir); 

要递归删除目录,可以使用以下代码
注意:$var可以是文件或目录。如果是目录,则删除所有内容和目录。
来源:,请查看gmail.com上jurchiks101的评论。

if(file_exists($var))
{
    if (PHP_OS === 'Windows')
    {
        exec("rd /s /q {$var}");
    }
    else
    {
        exec("rm -rf {$var}");
    }
}

我面对同样的问题,找到了解决办法

protected function _deleteFolder($path = null) {

    if (!$path || !file_exists($path)) {
        return FALSE;
    }

    delete_files($path, true); // delete all files/folders
    rmdir($path);
}

$folder_path = '/path/to/the/folder/to/be/zipped/downloaded';
$this->zip->read_dir($folder_path, FALSE);
$this->_deleteFolder($folder_path); // This will delete the folder
$this->zip->download('zipped-downloadable-file-name.zip');

这对我来说很有效。

似乎PHP和您的服务器目录捆绑在一起,在压缩之后,它会说“嘿,我还没完成,这些目录/文件不是免费的…”。。。(不确定罪魁祸首)但是当你复制一个临时目录,压缩文件夹和文件,然后删除原始目录时会发生什么?只是好奇。嗨@FrankTudor谢谢,我每次都在创建一个新目录。只是好奇..你是在windows还是linux上?好的,你试过zip close()了吗?看起来它会锁定你的文件和目录,直到你显式调用close。如果您已经尝试过,请道歉。您可能需要重构代码一点。。。看看这个SO编码器是如何设置的…更详细但更明确。。。