thinkphp3.2实现上传图片的控制器方法


Posted in PHP onApril 28, 2016

本文讲述了thinkphp3.2实现上传图片的控制器方法。分享给大家供大家参考,具体如下:

public function file()
{
  $baseUrl = str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME']));
  import('ORG.Net.UploadFile');
  import('ORG.Util.Services_JSON');
  $upload = new UploadFile();
  $upload->maxSize = 3145728;
  $upload->allowExts = array('jpg', 'gif', 'png', 'jpeg');
  $upload->savePath = './uploads/Images/';
  $info = $upload->uploadOne($_FILES['imgFile']);
  $file_url = $baseUrl . 'uploads/Images/' . $info['0']['savename'];
  if ($info) {
   header('Content-type: text/html; charset=UTF-8');
   $json = new Services_JSON();
   echo $json->encode(array('error' => 0, 'url' => $file_url));
   exit;
  } else {
   $this->error($upload->getErrorMsg());
  }
}
public function file_manager()
{
  import('ORG.Util.Services_JSON');
  $php_path = dirname(__FILE__) . '/';
  $php_url = dirname($_SERVER['PHP_SELF']) . '/';
  $root_path = $php_path . './uploads/Images/';
  $root_url = $php_url . './uploads/Images/';
  $ext_arr = array('gif', 'jpg', 'jpeg', 'png', 'bmp');
  $dir_name = emptyempty($_GET['dir']) ? '' : trim($_GET['dir']);
  if (!in_array($dir_name, array('', 'image', 'flash', 'media', 'file'))) {
   echo "Invalid Directory name.";
   exit;
  }
  if ($dir_name !== '') {
   $root_path .= $dir_name . "/";
   $root_url .= $dir_name . "/";
   if (!file_exists($root_path)) {
    mkdir($root_path);
   }
  }
//根据path参数,设置各路径和URL
  if (emptyempty($_GET['path'])) {
   $current_path = realpath($root_path) . '/';
   $current_url = $root_url;
   $current_dir_path = '';
   $moveup_dir_path = '';
  } else {
   $current_path = realpath($root_path) . '/' . $_GET['path'];
   $current_url = $root_url . $_GET['path'];
   $current_dir_path = $_GET['path'];
   $moveup_dir_path = preg_replace('/(.*?)[^\/]+\/$/', '$1', $current_dir_path);
  }
  echo realpath($root_path);
//排序形式,name or size or type
  $order = emptyempty($_GET['order']) ? 'name' : strtolower($_GET['order']);
//不允许使用..移动到上一级目录
  if (preg_match('/\.\./', $current_path)) {
   echo 'Access is not allowed.';
   exit;
  }
//最后一个字符不是/
  if (!preg_match('/\/$/', $current_path)) {
   echo 'Parameter is not valid.';
   exit;
  }
//目录不存在或不是目录
  if (!file_exists($current_path) || !is_dir($current_path)) {
   echo 'Directory does not exist.';
   exit;
  }
//遍历目录取得文件信息
  $file_list = array();
  if ($handle = opendir($current_path)) {
   $i = 0;
   while (false !== ($filename = readdir($handle))) {
    if ($filename{0} == '.') continue;
    $file = $current_path . $filename;
    if (is_dir($file)) {
     $file_list[$i]['is_dir'] = true; //是否文件夹
     $file_list[$i]['has_file'] = (count(scandir($file)) > 2); //文件夹是否包含文件
     $file_list[$i]['filesize'] = 0; //文件大小
     $file_list[$i]['is_photo'] = false; //是否图片
     $file_list[$i]['filetype'] = ''; //文件类别,用扩展名判断
    } else {
     $file_list[$i]['is_dir'] = false;
     $file_list[$i]['has_file'] = false;
     $file_list[$i]['filesize'] = filesize($file);
     $file_list[$i]['dir_path'] = '';
     $file_ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
     $file_list[$i]['is_photo'] = in_array($file_ext, $ext_arr);
     $file_list[$i]['filetype'] = $file_ext;
    }
    $file_list[$i]['filename'] = $filename; //文件名,包含扩展名
    $file_list[$i]['datetime'] = date('Y-m-d H:i:s', filemtime($file)); //文件最后修改时间
    $i++;
   }
   closedir($handle);
  }
//排序
  usort($file_list, 'cmp_func');
  $result = array();
//相对于根目录的上一级目录
  $result['moveup_dir_path'] = $moveup_dir_path;
//相对于根目录的当前目录
  $result['current_dir_path'] = $current_dir_path;
//当前目录的URL
  $result['current_url'] = $current_url;
//文件数
  $result['total_count'] = count($file_list);
//文件列表数组
  $result['file_list'] = $file_list;
//输出JSON字符串
  header('Content-type: application/json; charset=UTF-8');
  $json = new Services_JSON();
  echo $json->encode($result);
}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP安全防范技巧分享
Nov 03 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
PHP实现微信公众平台音乐点播
Mar 20 PHP
Laravel 5.0 发布 新版本特性详解
Feb 10 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 PHP
PHP四种基本排序算法示例
Apr 09 PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 PHP
PHP实现的获取文件mimes类型工具类示例
Apr 08 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
PHP实现读取文件夹及批量重命名文件操作示例
Apr 15 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
PHP简单实现文本计数器的方法
Apr 28 #PHP
Yii2 rbac权限控制之菜单menu实例教程
Apr 28 #PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
Apr 28 #PHP
PHP在线调试执行的实现方法(附demo源码)
Apr 28 #PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 #PHP
Composer设置忽略版本匹配的方法
Apr 27 #PHP
抛弃 PHP 代价太高
Apr 26 #PHP
You might like
隐藏你的.php文件的实现方法
2007/03/19 PHP
hadoop常见错误以及处理方法详解
2013/06/19 PHP
使用PHPExcel操作Excel用法实例分析
2015/03/26 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
javascript 单选框,多选框美化代码
2008/08/01 Javascript
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
JS文件上传神器bootstrap fileinput详解
2021/01/28 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
如何利用 JS 脚本实现网页全自动秒杀抢购功能
2020/10/12 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
python中MySQLdb模块用法实例
2014/11/10 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
python之信息加密题目详解
2019/06/26 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
CSS3实现简易版的刮刮乐效果
2016/09/27 HTML / CSS
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
医学生个人求职信范文
2013/09/24 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
紫日观后感
2015/06/05 职场文书
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android