如何在 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 项目中压缩文件夹的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Objective C 中压缩、解压缩文件(arm64 支持)