private function fileImageUpload($option)
 {
     if (empty($option['width'])) {
         $option['width'] = 600;
     }
     if (!empty($_FILES['file']['name'])) {
         $ret = Utility::upload($_FILES['file']);
         if (is_error($ret)) {
             $this->frameCallback($ret);
         }
         File::imageThumb($ret['abs'], $ret['abs'], $option['width']);
         $result = array();
         $result['filename'] = $ret['filename'];
         $result['url'] = $ret['url'];
         $result['error'] = 0;
         $this->frameCallback($result);
     } else {
         $this->frameCallback(error(-1, '请选择要上传的图片!'));
     }
 }
 public function bomAction()
 {
     if (IS_POST) {
         $f = I('post.file');
         if (!empty($f)) {
             $fname = MB_ROOT . $f;
             if (is_file($fname)) {
                 $data = file_get_contents($fname);
                 $bom = substr($data, 0, 3);
                 if ($bom == "") {
                     $data = substr($data, 3);
                     file_put_contents($fname, $data);
                     exit('success');
                 }
             }
             exit;
         }
         $path = MB_ROOT;
         $tree = File::tree($path);
         $ds = array();
         foreach ($tree as $t) {
             $t = str_replace($path, '', $t);
             $t = str_replace('\\', '/', $t);
             if (preg_match('/^.*\\.php$/', $t)) {
                 $fname = $path . $t;
                 $fp = fopen($fname, 'r');
                 if (!empty($fp)) {
                     $bom = fread($fp, 3);
                     fclose($fp);
                     if ($bom == "") {
                         $ds[] = $t;
                     }
                 }
             }
         }
         $this->assign('ds', $ds);
     }
     C('FRAME_CURRENT', U('control/site/flush'));
     $this->display();
 }
 public function addonsAction()
 {
     $addons = array();
     $path = MB_ROOT . 'addons/';
     if (is_dir($path)) {
         if ($handle = opendir($path)) {
             while (false !== ($addonpath = readdir($handle))) {
                 if ($addonpath != '.' && $addonpath != '..') {
                     $define = Addon::getAddon($addonpath, true);
                     if (!is_error($define)) {
                         $addons[] = $define;
                     }
                 }
             }
         }
     }
     if (IS_POST) {
         $a = I('post.addon');
         $addons = coll_key($addons, 'name');
         $addon = $addons[$a];
         if (!empty($addon)) {
             $zip = new \ZipArchive();
             $tmpFile = ADDON_CURRENT_PATH . 'Data/package.zip';
             @unlink($tmpFile);
             $zip->open($tmpFile, \ZipArchive::CREATE);
             $root = MB_ROOT . "addons/{$a}";
             $files = File::tree($root);
             foreach ($files as $file) {
                 $local = substr($file, strlen($root));
                 if (substr($local, -4) == '.php') {
                     if (I('post.trim') != '') {
                         $content = $this->trimComments($file, I('post.license'));
                     }
                     $zip->addFromString("{$a}{$local}", $content);
                 } else {
                     $zip->addFile($file, "{$a}{$local}");
                 }
             }
             $zip->close();
             $version = MB_VERSION;
             $filename = "{$a}-v{$addon['version']} (for MB-{$version})";
             header('content-type: application/zip');
             header('content-disposition: attachment; filename="' . $filename . '.zip"');
             readfile($tmpFile);
             @unlink($tmpFile);
         }
     }
     $this->assign('addons', $addons);
     $this->display('addons');
 }
 /**
  * 上传文件保存,缩略图暂未实现
  *
  * @param string $file  上传的$_FILE字段
  * @param string $type  上传类型(将按分类保存不同子目录,image -> images)
  * @param string $sname 保存的文件名,如果为 auto 则自动生成文件名,否则请指定从附件目录开始的完整相对路径(包括文件名,不包括文件扩展名)
  * @param array $extra
  * @return array 返回结果数组,字段包括:success => bool 是否上传成功,path => 保存路径(从附件目录开始的完整相对路径)
  */
 public static function upload($file, $type = 'image', $sname = 'auto')
 {
     if (empty($file)) {
         return error(-1, '没有上传内容');
     }
     $type = in_array($type, array('image', 'audio')) ? $type : 'image';
     $settings = array('image' => array('storage' => 'images/', 'extentions' => array('jpg', 'png'), 'limit' => 1024));
     if (!array_key_exists($type, $settings)) {
         return error(-1, '未知的上传类型');
     }
     $extention = pathinfo($file['name'], PATHINFO_EXTENSION);
     if (!in_array(strtolower($extention), $settings[$type]['extentions'])) {
         return error(-1, '不允许上传此类文件');
     }
     if (!empty($settings[$type]['limit']) && $settings[$type]['limit'] * 1024 < filesize($file['tmp_name'])) {
         return error(-1, "上传的文件超过大小限制,请上传小于 {$settings[$type]['limit']}k 的文件");
     }
     $path = MB_ROOT . '/attachment/';
     $ret = array();
     if ($sname == 'auto') {
         $ret['filename'] = $settings[$type]['storage'] . date('Y/m/');
         File::mkdirs($path . $ret['filename']);
         do {
             $filename = util_random(30) . ".{$extention}";
         } while (file_exists($path . $ret['filename'] . $filename));
         $ret['filename'] .= $filename;
     } else {
         $ret['filename'] = $settings[$type]['storage'] . $sname;
         mkdirs(dirname($path . $ret['filename']));
     }
     $ret['abs'] = $path . $ret['filename'];
     if (!File::move($file['tmp_name'], $ret['abs'])) {
         return error(-1, '保存上传文件失败');
     }
     $ret['url'] = attach('attachment/' . $ret['filename']);
     return $ret;
 }