如何在 Laravel 项目中压缩文件夹

Posted

技术标签:

【中文标题】如何在 Laravel 项目中压缩文件夹【英文标题】:How to gzip folder in Laravel project 【发布时间】:2018-11-15 17:16:38 【问题描述】:

我想将 Laravel 项目中的文件夹及其内容压缩到尽可能高的压缩级别的 gzip 存档中。

storage_path().'myFolder'

这并不意味着通过 HTTP 传输,因此请不要与服务器响应 gzip 压缩混淆。

我只是想要一个存档,但没有找到有关 Laravel 是否有任何用于此目的的工具的信息,有什么想法吗?

【问题讨论】:

Gzip 是一种流压缩格式,它没有文件或目录的概念。您需要使用像 tar 和 gzip 这样的存档格式,或者使用像 Zipfile 这样的组合格式。 /bin/bash ? $ tar -zcf ./archive.tar.gz ./myFolder。来自 php shell_exec('tar -zcf [path_to]/archive.tar.gz [path_from]/myFolder') 或使用php.net/manual/en/class.ziparchive.php 到目前为止你有什么尝试? 【参考方案1】:

这里有一个帮助函数。

if (!function_exists('gzip')) 
    function gzip($filename, $disk = 'local', $delete_original = false)
    
        $disk = Storage::disk($disk);
        $data = $disk->get($filename);
        $out_file = "$filename.gz";

        $gzdata = gzencode($data, 9);
        $disk->put($out_file, $gzdata);
        $fp = fopen($disk->path($out_file), "w");
        $result = fwrite($fp, $gzdata);
        fclose($fp);

        if ($result && $delete_original) 
            $disk->delete($filename);
        

        return $result > 0;

    

在 laravel 7.x 上测试并为我工作。只需确保您的机器上启用了 gzip 压缩即可。

【讨论】:

【参考方案2】:

对我来说,这似乎不是 Laravel 特有的问题。对于普通的 zip 压缩,有可用的 Laravel 包(即zanysoft/laravel-zip),但对于 gzip,你可能想看看this answer。对我来说,它看起来不需要自己的包来完成这项工作。

顺便说一句,您可以使用storage_path('myFolder') 来代替storage_path().'myFolder'。这将正确连接路径。

【讨论】:

以上是关于如何在 Laravel 项目中压缩文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 5 中压缩 HTML

如何在 Objective C 中压缩、解压缩文件(arm64 支持)

如何在android中压缩和解压缩png图像

在java中压缩和解压缩7z文件

如何仅使用 Windows 的内置功能从脚本中压缩或解压缩?

我如何在 React js 中压缩任何图像以及 Excel 和 CSV 文件