如何在php中将文件转换为zip

Posted

技术标签:

【中文标题】如何在php中将文件转换为zip【英文标题】:How to convert a file to zip in php 【发布时间】:2020-03-20 11:34:38 【问题描述】:

我必须将 php 中呈现的文件转换为 zip 文件。

这是我的代码:

 $cacheContent = $gRender->getRenderRaw(
                    "feed-google", array(
                    "_context_" => $this->getType(),
                    "_lang_" => $this->getLang()->getId(),
                    "_id_" => $id));


                $cacheDriver->save($cacheKey, $cacheContent, $cacheExpire);

你能帮我如何将 cacheContent 转换为 zip 吗?

编辑: 在缓存文件夹中生成一个哈希文件,格式如下:5d.doctrinecache.data

每次生成文件名更改。里面的这个文件是这样的:

    <?xml version="1.0"?>
    <rss version="2.0"  xmlns:g="http://google.com">
                <channel>
                                <title>Item</title>
                    <link></link>
                    <description></description>
                    <language></language>
                    <lastBuildDate></lastBuildDate>
                    <generator></generator>

                <item>
  </item>    
        </channel>
    </rss>

这个文件我要转换成 zip 格式

【问题讨论】:

您可以在 PHP 中使用ZipArchive 方法。 Here is a simple implementation. 【参考方案1】:

试试这个:

$rootPath = $_SERVER['DOCUMENT_ROOT'];
$backup_name = "exported_zip_file.zip";
$file_name   = "cacheContent.xml";
$file_content = "cacheContent"; // your string
$zip = new ZipArchive();
$zip -> open($rootPath . "/" . $backup_name, ZipArchive::CREATE | ZipArchive::OVERWRITE);
$zip -> addFromString($file_name, $file_content);
$zip -> close();

/* this can be deleted */

$zip_final = $rootPath . "/" .$backup_name;
//
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename = ".$backup_name);
header("Content-Length: " . filesize($zip_final));
//
if(readfile($zip_final)) 
    exit;

基本上,您是在 $backup_name 中定义 zip 的名称。

接下来,您将在 $file_name 中定义文件的名称。

接下来,您将在 $file_content 中定义文件中的内容。

接下来您将创建或覆盖一个新的 zip 存档。

接下来您将创建一个新文件并将您的 $file_content 添加到其中。

最后关闭 zip 文件。

“这可以删除”上方是一些标题,可让您的浏览器下载新的 .zip 文件

【讨论】:

警告:dirname() 期望参数 2 为整数,字符串给定我有这个警告 问题出在:$zip -> addFile(dirname($rootPath . "/" . $backup_name, $backup_name));我唯一的改变是 rootPath ,我做了: $rootPath = THELIA_CACHE_DIR 。 DS 。自我::FEED_CACHE_DIR; 对不起,我是 php 新手,我不知道,但我还有其他问题:警告:ZipArchive::addFile(): Invalid or uninitialized Zip object my_string.txt 创建但未创建 zip 让我们continue this discussion in chat。

以上是关于如何在php中将文件转换为zip的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring MVC 中将字节数组转换为 ZipOutputStream?

对在 django 中将 CSV 文件转换为 ZIP 文件感到困惑

如何在 php 中将 Json 转换为 CSV

如何在 PHP 中将图像从 base 64 转换为它们的文件类型?

如何在php中将0.5转换为50

在PHP中将EXCEL文件转换为CSV文件[重复]