墨轩娣 2015-10-29 10:23:00 5545次浏览 1条评论 5 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-10-31 09:58 举报

    哥们,你版本号选择的不一致啊,文章名字的版本和文章类型的版本。

    1 条回复
    评论于 2015-10-31 10:04 回复

    哎呀,忽略了

您需要登录后才可以评论。登录 | 立即注册