https://github.com/Chumper/Zipper
github地址
composer require chumper/zipper

看到这个代表安装成功
代表路由
.
.
.
// package chumper/zipper
Route::get('zip', 'ZipController@index')->name('zip.index');
Route::post('zip/download', 'ZipController@download')->name('zip.download');
Route::post('zip/upload', 'ZipController@upload')->name('zip.upload');
创建一个控制器
php artisan make:controller ZipController

这个文件带有过滤功能 并且返回的是一个类.
列表所有日志文件#
app/Http/Controllers/ZipController.php
<?phpnamespace App\Http\Controllers;use File;
use Illuminate\Http\Request;class ZipController extends Controller
{public function index(){$logs = File::files(storage_path('logs'));return view('zip', compact('logs'));}
}
创建视图文件:
touch resources/views/zip.blade.php

填入如下内容:
resources/views/zip.blade.php
@extends('layouts.app')@section('title', 'chumper/zipper 扩展示例')@section('content')<div class="row"><form class="form-inline pull-right" method="POST" action="{{ route('zip.upload') }}" enctype="multipart/form-data">{{ csrf_field() }}<div class="form-group"><input type="file" name="logs" style="width:170px" required></div><button type="submit" class="btn btn-default">导入</button></form><form method="POST" action="{{ route('zip.download') }}">{{ csrf_field() }}<button class="btn btn-default" type="submit">批量下载</button><table class="table table-striped"><thead><tr><th></th><th>文件名</th><th>创建时间</th><th>最后修改时间</th></tr></thead><tbody>@foreach($logs as $log)<tr><th scope="row"><input type="checkbox" name="logs[]" value="{{ $log->getBasename() }}"></th><td>{{ $log->getBasename() }}</td><td>{{ Date('Y-m-d H:i:s', $log->getCtime()) }}</td><td>{{ Date('Y-m-d H:i:s', $log->getMtime()) }}</td></tr>@endforeach</tbody></table></form>
</div>
@endsection

接下来先写一个dowon的方法

.
.
.
use Zipper;.
.
.public function download(Request $request){// 打包文件名$name = 'logs-'.time().'.zip';// 创建 zip 文件 folder是文件的目录$zipper = Zipper::make($name)->folder('logs');//循环用户勾选的文件 logsforeach($request->logs as $log) {// 检查提交的文件是否存在$path = storage_path('logs/'.basename($log));if (!File::exists($path)) {continue;}// 将文件加入 zip 包$zipper->add($path);}// 关闭zip,一定要调用$zipper->close();// 返回下载响应,下载完成后删除文件return response()->download(public_path($name))->deleteFileAfterSend(true);}
}

代表下载成功


接下来完成上传解压的功能

.
.
.public function upload(Request $request){if ($request->logs) {//加载上传的文件$zipper = Zipper::make($request->logs);// 可以使用 listFiles() 查看 zip 文件内容logger('zip file list:');logger($zipper->listFiles());//解压所有以.log结尾的文件$zipper->folder('logs')->extractMatchingRegex(storage_path('logs'), '/\.log$/');}//最终跳转回列表页面return redirect()->route('zip.index');}
.
.
.
准备测试文件


这里上传成功
















