Php ZipArchive::close():读取错误:是一个目录

Php ZipArchive::close():读取错误:是一个目录,php,directory,ziparchive,Php,Directory,Ziparchive,我试图找出这个问题,但我无法想象为什么它一直发生。我正在将文件添加到ZipArchive,当我尝试关闭它时,它会得到一个错误,即目标是一个目录。但我敢肯定不是 这是zip函数的代码: function create_zip($folder, $destination) { $valid_files = get_files($folder); if(count($valid_files)) { $zip = new ZipArchive();

我试图找出这个问题,但我无法想象为什么它一直发生。我正在将文件添加到ZipArchive,当我尝试关闭它时,它会得到一个错误,即目标是一个目录。但我敢肯定不是

这是zip函数的代码:

function create_zip($folder, $destination) {
    $valid_files = get_files($folder);
    if(count($valid_files)) {       
        $zip = new ZipArchive();
        if($zip->open($destination, ZIPARCHIVE::CREATE) !== true) {
            return false;
        }
        //add the files
        foreach($valid_files as $file) {
            $zip->addFile($file,$file);
        }
        $zip->close();
        return file_exists($destination);
    }
    else
    {
        return false;
    }
}

function get_files($folder){
    $valid_files = array();
    $files = scandir($folder);
    foreach($files as $file) {
        if(substr($file, 0, 1) == "." || !is_readable($folder . '/' . $file)) {
            continue;
        }
        if(is_dir($file)){
            array_merge($valid_files, get_files($folder . '/' . $file));
        } else {
            $valid_files[] = $folder . '/' . $file;
        }
    }
    return $valid_files;
}
我这样称呼它,所以它实际上不应该是一个目录:

$dest = "backups/" . time() . "_backup.zip";
if(file_exists($dest)){
    if(is_dir($dest)) {
        rmdir($dest);
    } else {
        unlink($dest);  
    }
}
create_zip('crawler/out', $dest);
也许这里有人能帮我。谢谢大家!


Simon

在本例中,目录不是zip存档,而是添加到其中的文件

在添加文件之前,请尝试添加以下内容:

if (file_exists($file) && is_file($file))
并在此处更改文件名而不是文件路径:


$zip->addFile($file,$file

在本例中,目录不是zip存档,而是添加到其中的文件

在添加文件之前,请尝试添加以下内容:

if (file_exists($file) && is_file($file))
并在此处更改文件名而不是文件路径:


$zip->addFile($file,$file

。。。而且PHP7的行为改变。如果要压缩的文件夹中有子文件夹:


。。。而且PHP7的行为改变。如果要压缩的文件夹中有子文件夹:


这是一种什么样的语言?JS?如果是这样,您是否应该使用JSZip?该线程是关于ZipArchive PHP扩展的。不,它是C#。我有一个解决办法。但现在的问题是“下载到StreamAsync”需要花费大量时间来处理大文件。这是一种什么样的语言?JS?如果是这样,您是否应该使用JSZip?该线程是关于ZipArchive PHP扩展的。不,它是C#。我有一个解决办法。但现在的问题是“下载到StreamAsync”需要花费大量时间来处理大文件。