php创建拉链没有路径到zip文件的路径

Sou*_*aby 48 php directory zip

我正在尝试使用php创建一个zip文件(它可以从这个页面中获取 - http://davidwalsh.name/create-zip-php),但是在zip文件中是所有的文件夹名称.文件本身.

是否可以让zip文件中的文件减去所有文件夹?

这是我的代码:

function create_zip($files = array(), $destination = '', $overwrite = true) {

    if(file_exists($destination) && !$overwrite) { return false; };
    $valid_files = array();
    if(is_array($files)) {
        foreach($files as $file) { 
            if(file_exists($file)) { 
                $valid_files[] = $file;
            };
        };
    };
    if(count($valid_files)) { 
        $zip = new ZipArchive();
        if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { 
            return false;
        };
        foreach($valid_files as $file) { 
            $zip->addFile($file,$file);
        };
        $zip->close();
        return file_exists($destination);
    } else {
        return false;
    };

};


$files_to_zip = array('/media/138/file_01.jpg','/media/138/file_01.jpg','/media/138/file_01.jpg');

$result = create_zip($files_to_zip,'/...full_site_path.../downloads/138/138_files.zip');
Run Code Online (Sandbox Code Playgroud)

Nat*_*man 124

这里的问题是$zip->addFile传递相同的两个参数.

根据文件:

bool ZipArchive :: addFile(string $ filename [,string $ localname ])

filename
要添加的文件的路径.


ZIP存档中的localname本地名称.

这意味着第一个参数是文件系统中实际文件的路径,第二个参数是文件在归档中的路径和文件名.

当您提供第二个参数时,您需要在将其添加到zip存档时从中删除路径.例如,在基于Unix的系统上,这看起来像:

$new_filename = substr($file,strrpos($file,'/') + 1);
$zip->addFile($file,$new_filename);
Run Code Online (Sandbox Code Playgroud)

  • 感谢Nathan,5年后仍然有用.这个弹出的原因是我们都从非常受欢迎的David Walsh那里抓取了相同的ZipArchive脚本:https://davidwalsh.name/create-zip-php其中包含该问题:) (3认同)
  • @HartleySan,这是因为之前创建了 ZIP,并且正在打开它以使用没有路径的新文件进行扩展。尝试先删除 ZIP,您将不会同时获得带路径和不带路径的文件。 (2认同)

小智 42

我认为更好的选择是:

$zip->addFile($file,basename($file));
Run Code Online (Sandbox Code Playgroud)

这只是从路径中提取文件名.