123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- <?php
- /**
- * 易优CMS
- * ============================================================================
- * 版权所有 2016-2028 海南赞赞网络科技有限公司,并保留所有权利。
- * 网站地址: http://www.eyoucms.com
- * ----------------------------------------------------------------------------
- * 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
- * ============================================================================
- * Author: 小虎哥 <1105415366@qq.com>
- * Date: 2018-4-3
- */
- namespace app\admin\controller;
- use app\admin\controller\Base;
- use think\Controller;
- use think\Db;
- use app\admin\logic\FilemanagerLogic;
- class Filemanager extends Base
- {
- public $filemanagerLogic;
- public $baseDir = '';
- public $maxDir = '';
- public $globalTpCache = array();
- public function _initialize() {
- parent::_initialize();
- $this->filemanagerLogic = new FilemanagerLogic();
- $this->globalTpCache = $this->filemanagerLogic->globalTpCache;
- $this->baseDir = $this->filemanagerLogic->baseDir; // 服务器站点根目录绝对路径
- $this->maxDir = $this->filemanagerLogic->maxDir; // 默认文件管理的最大级别目录
- }
- public function index()
- {
- // 获取到所有GET参数
- $param = input('param.', '', null);
- $activepath = input('param.activepath', '', null);
- $activepath = $this->filemanagerLogic->replace_path($activepath, ':', true);
- /*当前目录路径*/
- $activepath = !empty($activepath) ? $activepath : $this->maxDir;
- $tmp_max_dir = preg_replace("#\/#i", "\/", $this->maxDir);
- if (!preg_match("#^".$tmp_max_dir."#i", $activepath)) {
- $activepath = $this->maxDir;
- }
- /*--end*/
- $inpath = "";
- $activepath = str_replace("..", "", $activepath);
- $activepath = preg_replace("#^\/{1,}#", "/", $activepath); // 多个斜杆替换为单个斜杆
- if($activepath == "/") $activepath = "";
- if(empty($activepath)) {
- $inpath = $this->baseDir.$this->maxDir;
- } else {
- $inpath = $this->baseDir.$activepath;
- }
- $list = $this->filemanagerLogic->getDirFile($inpath, $activepath);
- $assign_data['list'] = $list;
- /*文件操作*/
- $assign_data['replaceImgOpArr'] = $this->filemanagerLogic->replaceImgOpArr;
- $assign_data['editOpArr'] = $this->filemanagerLogic->editOpArr;
- $assign_data['renameOpArr'] = $this->filemanagerLogic->renameOpArr;
- $assign_data['delOpArr'] = $this->filemanagerLogic->delOpArr;
- $assign_data['moveOpArr'] = $this->filemanagerLogic->moveOpArr;
- /*--end*/
- $assign_data['activepath'] = $activepath;
- $this->assign($assign_data);
- return $this->fetch();
- }
- /**
- * 替换图片
- */
- public function replace_img()
- {
- if (IS_POST) {
- $post = input('post.', '', null);
- $activepath = !empty($post['activepath']) ? trim($post['activepath']) : '';
- if (empty($activepath)) {
- $this->error('参数有误');
- exit;
- }
- $file = request()->file('upfile');
- if (empty($file)) {
- $this->error('请选择上传图片!');
- exit;
- } else {
- $image_type = tpCache('basic.image_type');
- $fileExt = !empty($image_type) ? str_replace('|', ',', $image_type) : config('global.image_ext');
- $image_upload_limit_size = intval(tpCache('basic.file_size') * 1024 * 1024);
- $result = $this->validate(
- ['file' => $file],
- ['file'=>'image|fileSize:'.$image_upload_limit_size.'|fileExt:'.$fileExt],
- ['file.image' => '上传文件必须为图片','file.fileSize' => '上传文件过大','file.fileExt'=>'上传文件后缀名必须为'.$fileExt]
- );
- if (true !== $result || empty($file)) {
- $this->error($result);
- exit;
- }
- }
- $res = $this->filemanagerLogic->upload('upfile', $activepath, $post['filename'], 'image');
- if ($res['code'] == 1) {
- $this->success('操作成功!', url('Filemanager/index', array('activepath'=>$this->filemanagerLogic->replace_path($activepath, ':', false))));
- } else {
- $this->error($res['msg'], url('Filemanager/index', array('activepath'=>$this->filemanagerLogic->replace_path($activepath, ':', false))));
- }
- }
- $filename = input('param.filename/s', '', null);
- $activepath = input('param.activepath/s', '', null);
- $activepath = $this->filemanagerLogic->replace_path($activepath, ':', true);
- if ($activepath == "") $activepathname = "根目录";
- else $activepathname = $activepath;
- $info = array(
- 'activepath' => $activepath,
- 'activepathname' => $activepathname,
- 'filename' => $filename,
- );
- $this->assign('info', $info);
- return $this->fetch();
- }
- /**
- * 编辑
- */
- public function edit()
- {
- if (IS_POST) {
- $post = input('post.', '', null);
- $content = input('post.content', '', null);
- $filename = !empty($post['filename']) ? trim($post['filename']) : '';
- $content = !empty($content) ? $content : '';
- $activepath = !empty($post['activepath']) ? trim($post['activepath']) : '';
- if (empty($filename) || empty($activepath)) {
- $this->error('参数有误');
- exit;
- }
- $r = $this->filemanagerLogic->editFile($filename, $activepath, $content);
- if ($r === true) {
- $this->success('操作成功!', url('Filemanager/index', array('activepath'=>$this->filemanagerLogic->replace_path($activepath, ':', false))));
- exit;
- } else {
- $this->error($r);
- exit;
- }
- }
- $activepath = input('param.activepath/s', '', null);
- $activepath = $this->filemanagerLogic->replace_path($activepath, ':', true);
- $filename = input('param.filename/s', '', null);
- $activepath = str_replace("..", "", $activepath);
- $filename = str_replace("..", "", $filename);
- $path_parts = pathinfo($filename);
- $path_parts['extension'] = strtolower($path_parts['extension']);
- /*不允许越过指定最大级目录的文件编辑*/
- $tmp_max_dir = preg_replace("#\/#i", "\/", $this->filemanagerLogic->maxDir);
- if (!preg_match("#^".$tmp_max_dir."#i", $activepath)) {
- $this->error('没有操作权限!');
- exit;
- }
- /*--end*/
-
- /*允许编辑的文件类型*/
- if (!in_array($path_parts['extension'], $this->filemanagerLogic->editExt)) {
- $this->error('只允许操作文件类型如下:'.implode('|', $this->filemanagerLogic->editExt));
- exit;
- }
- /*--end*/
- /*读取文件内容*/
- $file = $this->baseDir."$activepath/$filename";
- $content = "";
- if(is_file($file))
- {
- $filesize = filesize($file);
- if (0 < $filesize) {
- $fp = fopen($file, "r");
- $content = fread($fp, $filesize);
- fclose($fp);
- if ('css' != $path_parts['extension']) {
- $content = htmlspecialchars($content, ENT_QUOTES);
- $content = preg_replace("/(@)?eval(\s*)\(/i", 'intval(', $content);
- // $content = preg_replace("/\?\bphp\b/i", "?muma", $content);
- }
- }
- }
- /*--end*/
- if($path_parts['extension'] == 'js'){
- $extension = 'text/javascript';
- } else if($path_parts['extension'] == 'css'){
- $extension = 'text/css';
- } else {
- $extension = 'text/html';
- }
- $info = array(
- 'filename' => $filename,
- 'activepath'=> $activepath,
- 'extension' => $extension,
- 'content' => $content,
- );
- $this->assign('info', $info);
- return $this->fetch();
- }
- /**
- * 新建文件
- */
- public function newfile()
- {
- if (IS_POST) {
- $post = input('post.', '', null);
- $content = input('post.content', '', null);
- $filename = !empty($post['filename']) ? trim($post['filename']) : '';
- $content = !empty($content) ? $content : '';
- $activepath = !empty($post['activepath']) ? trim($post['activepath']) : '';
- if (empty($filename) || empty($activepath)) {
- $this->error('参数有误');
- exit;
- }
- $r = $this->filemanagerLogic->editFile($filename, $activepath, $content);
- if ($r === true) {
- $this->success('操作成功!', url('Filemanager/index', array('activepath'=>$this->filemanagerLogic->replace_path($activepath, ':', false))));
- exit;
- } else {
- $this->error($r);
- exit;
- }
- }
- $activepath = input('param.activepath/s', '', null);
- $activepath = $this->filemanagerLogic->replace_path($activepath, ':', true);
- $filename = 'newfile.htm';
- $content = "";
- $info = array(
- 'filename' => $filename,
- 'activepath'=> $activepath,
- 'content' => $content,
- 'extension' => 'text/html',
- );
- $this->assign('info', $info);
- return $this->fetch();
- }
- }
|