yii2 程序打包备份 [ 2.0 版本 ]
自己写的,感觉不是很满意,有很多地方都是勉强实现了,希望各位朋友指出其中的不合适之处,谢谢!!
控制器:
<?php
namespace backend\controllers;
use Yii;
use yii\web\Controller;
use pjkui\kindeditor\Helper;
class ZipController extends Controller
{
public function actionIndex()
{
// 删除可能存在的备份文件
$zip = Helper::scanfDir(yii::getAlias('@webroot') . '/uploads/zip');
if(!empty($zip['files'])){
foreach($zip['files'] as $zipdel){
unlink($zipdel);
}
}
if(isset($_POST['id'])){
$files = $_POST['id'];
if($files){
// 提交打包
$zip = new \ZipArchive();
$name = 'zip_' . date('YmdHis', time()) . '.zip';
$zip_path = 'uploads/zip';
//创建目录
if(!is_dir($zip_path)){
mkdir($zip_path, 0777, true);
}
$zipname = $zip_path . '/' . $name;
// 创建一个空的zip文件
if($zip->open($zipname, \ZipArchive::OVERWRITE)){
foreach($files as $file){
if(is_dir($file)){
// 递归检索文件
$allfiles = Helper::scanfDir($file, true);
if(!empty($allfiles['files'])){
foreach($allfiles['files'] as $v){
$zip->addFile(yii::getAlias('@webroot') . '/' . $v, $v);
}
}
}else{
$zip->addFile(yii::getAlias('@webroot') . '/' . $file, $file);
}
}
$zip->close();
yii::$app->response->sendFile($zipname, $name); // 开始下载
//@unlink($zipname); // 下载完成后删除
}else{
throw new CHttpException('404', 'Failed');
}
}
}
// 获取程序文件列表
$files = Helper::scanfDir(yii::getAlias('@webroot'));
asort($files['dirs']);
asort($files['files']);
$files = array_merge($files['dirs'], $files['files']);
$listFiles = array();
foreach($files as $file){
$tmpFileName = explode('/', $file);
$fileName = end($tmpFileName);
if(is_dir($file)){
$allFiles = Helper::scanfDir($file, true);
if(!empty($allFiles['files'])){
$fileSize = 0;
foreach((array)$allFiles['files'] as $val){
$fileSize += filesize($val);
}
}
$listFiles[$fileName]['type'] = 'dir';
}else{
$fileSize = filesize($val);
$listFiles[$fileName]['type'] = 'file';
}
$listFiles[$fileName]['id'] = $fileName;
$listFiles[$fileName]['size'] = Helper::byteFormat($fileSize);
$listFiles[$fileName]['update_time'] = filemtime($fileName);
}
return $this->render('index', ['listFiles' => $listFiles]);
}
}
视图:
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(); ?>
<table id="zip_form" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr height="45" style="border-bottom:1px solid #eee;">
<td align="center">
<input type="checkbox" id="chkall" name="chkall" onclick="checkAll(this.form, 'id')" />
</td>
<td colspan="3">
<label for="chkall">全选</label>
<input class="btn btn-success" type="submit" value="打包下载" name="maskall" />
</td>
</tr>
<tr bgcolor="#eef3f7" height="30" style="border-bottom:1px solid #d5dfe8; border-top:1px solid #d5dfe8;">
<th width="50"></th>
<th>文件名称</th>
<th>文件大小</th>
<th>编译名称</th>
</tr>
<?php foreach($listFiles as $row){ ?>
<tr height="30" style="border-bottom:1px solid #eee;">
<td align="center"><input type="checkbox" name="id[]" value="<?php echo $row['id']; ?>" /></td>
<td>
<img src="<?php echo $row['type']=='dir' ? Yii::getAlias('@web') . '/backend/web/images/folder.gif' : Yii::getAlias('@web') . '/backend/web/images/file.png'; ?>" align="absmiddle" />
<?php echo $row['id']; ?>
</td>
<td><?php echo $row['size']; ?></td>
<td><?php echo date('Y-m-d H:i:s', $row['update_time']); ?></td>
</tr>
<?php } ?>
</table>
<script type="text/javascript">
// 全选
function checkAll(form, name) {
for(var i = 0; i < form.elements.length; i++) {
var e = form.elements[i];
if(e.name.match(name)) {
e.checked = form.elements['chkall'].checked;
}
}
}
</script>
<style>
#zip_form{border-collapse:collapse;}
#zip_form td{ color:#555; font-weight:400; font-size:13px;}
</style>
<?php ActiveForm::end(); ?>
墨轩娣 无锡
注册时间:2015-03-25
最后登录:7小时前
在线时长:278小时18分
最后登录:7小时前
在线时长:278小时18分
- 粉丝38
- 金钱61410
- 威望150
- 积分65690
共 1 条评论
哥们,你版本号选择的不一致啊,文章名字的版本和文章类型的版本。
哎呀,忽略了