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 相关文章推荐
杏林同学录(九)
Oct 09 PHP
关于在php.ini中添加extension=php_mysqli.dll指令的说明
Jun 14 PHP
如何在smarty中增加类似foreach的功能自动加载数据
Jun 26 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
Oct 14 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
PHP文件上传类实例详解
Apr 08 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
Yii框架用户登录session丢失问题解决方法
Jan 07 PHP
几行代码轻松实现PHP文件打包下载zip
Mar 01 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 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
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
js单例模式详解实例
2013/11/21 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
JS小游戏之仙剑翻牌源码详解
2014/09/25 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
node模块机制与异步处理详解
2016/03/13 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
bootstrap日历插件datetimepicker使用方法
2016/12/14 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
jQuery中each遍历的三种方法实例分析
2018/09/07 jQuery
uni app仿微信顶部导航条功能
2019/09/17 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
python基础教程之Hello World!
2014/08/29 Python
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
html5 canvas实现跟随鼠标旋转的箭头
2016/03/11 HTML / CSS
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
程序员机试试题汇总
2012/03/07 面试题
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
人事专员岗位职责范本
2014/03/04 职场文书
大学军训感言1500字
2014/03/09 职场文书
学校对教师的评语
2014/04/28 职场文书
贫困证明书范文
2015/06/16 职场文书