|
| 1 | +<?php |
| 2 | + |
| 3 | +namespace kriss\logReader\models; |
| 4 | + |
| 5 | +use kriss\logReader\Log; |
| 6 | +use yii\base\Model; |
| 7 | +use ZipArchive; |
| 8 | + |
| 9 | +class ZipLogForm extends Model |
| 10 | +{ |
| 11 | + /** |
| 12 | + * @var Log |
| 13 | + */ |
| 14 | + public $log; |
| 15 | + |
| 16 | + public $start; |
| 17 | + |
| 18 | + public $end; |
| 19 | + |
| 20 | + public $deleteAfterZip = 0; |
| 21 | + |
| 22 | + public function rules() |
| 23 | + { |
| 24 | + return [ |
| 25 | + [['start', 'end'], 'string'], |
| 26 | + [['deleteAfterZip'], 'boolean'], |
| 27 | + ]; |
| 28 | + } |
| 29 | + |
| 30 | + public function attributeLabels() |
| 31 | + { |
| 32 | + return [ |
| 33 | + 'start' => 'Start Date', |
| 34 | + 'end' => 'End Date', |
| 35 | + 'deleteAfterZip' => 'Is Delete After Zip', |
| 36 | + ]; |
| 37 | + } |
| 38 | + |
| 39 | + public function init() |
| 40 | + { |
| 41 | + parent::init(); |
| 42 | + $this->start = date('Y-m-01'); |
| 43 | + $this->end = date('Y-m-d'); |
| 44 | + } |
| 45 | + |
| 46 | + public function zip() |
| 47 | + { |
| 48 | + $log = $this->log; |
| 49 | + $startStamp = date('Ymd', strtotime($this->start)); |
| 50 | + $endStamp = date('Ymd', strtotime($this->end)); |
| 51 | + $logs = []; |
| 52 | + foreach (glob(Log::extractFileName($log->alias, '*')) as $fileName) { |
| 53 | + $logEnd = Log::extractFileStamp($log->alias, $fileName); |
| 54 | + // 被自动切割的log文件可能为:jd.log.20181109.1 |
| 55 | + $arr = explode('.', $logEnd); |
| 56 | + if ($arr) { |
| 57 | + $logEnd = $arr[0]; |
| 58 | + } |
| 59 | + $stamp = date('Ymd', strtotime($logEnd)); |
| 60 | + if ($stamp >= $startStamp && $stamp <= $endStamp) { |
| 61 | + $log = new Log($log->name, $log->alias, Log::extractFileStamp($log->alias, $fileName)); |
| 62 | + if (!$log->isZip) { |
| 63 | + $logs[] = $log; |
| 64 | + } |
| 65 | + } |
| 66 | + } |
| 67 | + $current = date('YmdHis'); |
| 68 | + $fileName = Log::extractFileName($log->alias, "{$startStamp}-{$endStamp}-{$current}.zip"); |
| 69 | + $zip = new ZipArchive(); |
| 70 | + if ($zip->open($fileName, ZipArchive::CREATE) !== true) { |
| 71 | + $this->addError('log', 'cannot open zipFile, do you have permission?'); |
| 72 | + return false; |
| 73 | + } |
| 74 | + foreach ($logs as $log) { |
| 75 | + $zip->addFile($log->fileName, basename($log->fileName)); |
| 76 | + } |
| 77 | + $zip->close(); |
| 78 | + |
| 79 | + // 删除已打包的文件 |
| 80 | + if ($this->deleteAfterZip) { |
| 81 | + foreach ($logs as $log) { |
| 82 | + unlink($log->fileName); |
| 83 | + } |
| 84 | + } |
| 85 | + |
| 86 | + return true; |
| 87 | + } |
| 88 | +} |
0 commit comments