将文件从字符串添加到新文件夹 ZipArchive

Posted

技术标签:

【中文标题】将文件从字符串添加到新文件夹 ZipArchive【英文标题】:Add file from string to new folder ZipArchive 【发布时间】:2013-07-06 08:34:05 【问题描述】:

假设我有一个名为并实例化的变量:

$css = 'body color:red;';

目前,我正在按如下方式构建我的 zip 文件:

    ini_set("max_execution_time", 300);
    // create object
    $zip = new ZipArchive();
    // open archive
    if ($zip->open("my-archive.zip", ZIPARCHIVE::CREATE) !== TRUE) 
        die ("Could not open archive");
    
    // initialize an iterator
    // pass it the directory to be processed
    $jsFiles  = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("../js"));
    $cssFiles = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("../css"));
    $images   = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("../_design"));
    // iterate over the directory
    // add each file found to the archive
    foreach ($jsFiles as $key=>$value) 
        $zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key");
    
    foreach ($cssFiles as $key=>$value) 
        $zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key");
    
    foreach ($images as $key=>$value) 
        $zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key");
    
    // close and save archive
    $zip->close();
    echo "Archive created successfully.";

假设我已经有一个名为color.css 的文件位于/css/main/color.css/ 中,我希望我的新字符串$css 替换存档 中的整个NEW 文件>,我该怎么做?我查看了ZipArchive::addFromString,但看不到将其放入某个文件夹的方法。这是我整个目录中唯一需要更改的文件。

任何帮助都会很棒。

【问题讨论】:

【参考方案1】:

如果您查看示例 #2 http://www.php.net/manual/en/ziparchive.addfromstring.php,您会看到 ZipArchive::addFromString 的第一个参数实际上可以是 zip 存档中的任何路径。

因此,在您的情况下,调用将如下所示:

$zip->addFromString("css/main/color.css",$css);

【讨论】:

以上是关于将文件从字符串添加到新文件夹 ZipArchive的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发之压缩与解压文件

在创建之前估计 ZipArchive 的大小

如何在c#中解压.zip文件而不解压到新位置

php ZipArchive - 只添加文件而不是父文件夹

在 asp.net web api 中使用 MemoryStream 和 ZipArchive 将 zip 文件返回给客户端

来自不同目录问题的 PHP ZipArchive::AddFile