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模拟SQL Server的两个日期处理函数
Oct 09 PHP
php中文字母数字验证码实现代码
Apr 25 PHP
PHP5 操作MySQL数据库基础代码
Sep 29 PHP
smarty基础之拼接字符串的详解
Jun 18 PHP
关于php内存不够用的快速解决方法
Oct 26 PHP
php实现汉字验证码和算式验证码的方法
Mar 07 PHP
php生成圆角图片的方法
Apr 07 PHP
WordPress中查询文章的循环Loop结构及用法分析
Dec 17 PHP
PHP生成和获取XML格式数据的方法
Mar 04 PHP
magento后台无法登录解决办法的两种方法
Dec 09 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
PDO::rollBack讲解
Jan 29 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连接局域网MYSQL数据库的简单实例
2013/08/26 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
js重写方法的简单实现
2016/07/10 Javascript
如何快速上手Vuex
2017/02/14 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
js实现点赞效果
2020/03/16 Javascript
Vue 禁用浏览器的前进后退操作
2020/09/04 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
python构建自定义回调函数详解
2017/06/20 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
英国健身超市:Fitness Superstore
2019/06/17 全球购物
linux下进程间通信的方式
2014/12/23 面试题
《祁黄羊》教学反思
2014/04/22 职场文书
物理学专业求职信
2014/07/04 职场文书
自我工作评价范文
2015/03/06 职场文书
小学三年级作文之写景
2019/11/05 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
Redis特殊数据类型bitmap位图
2022/06/01 Redis