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 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
May 26 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
php发送与接收流文件的方法
Feb 11 PHP
PHP+MySQL实现无极限分类栏目的方法
Dec 23 PHP
浅谈PHP中其他类型转化为Bool类型
Mar 28 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
Dec 02 PHP
PHP实现防盗链的方法分析
Jul 25 PHP
分析php://output和php://stdout的区别
May 06 PHP
PHP后期静态绑定之self::限制实例分析
Dec 21 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
javascript some()函数用法详解
2014/11/13 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
基于jquery实现的鼠标悬停提示案例
2016/12/11 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
Python os模块学习笔记
2015/06/21 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
消防标语大全
2014/06/07 职场文书
关于国庆节的演讲稿
2014/09/05 职场文书
工作表现证明
2015/06/15 职场文书
2016情人节宣传语
2015/07/14 职场文书
公司岗位说明书
2015/10/08 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书