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 相关文章推荐
10条PHP编程习惯助你找工作
Sep 29 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
Mar 23 PHP
FirePHP 推荐一款PHP调试工具
Apr 23 PHP
linux iconv方法的使用
Oct 01 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
Dec 29 PHP
PHP5函数小全(分享)
Jun 06 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
php遍历类中包含的所有元素的方法
May 12 PHP
深入理解PHP内核(二)之SAPI探究
Nov 10 PHP
php基于curl实现随机ip地址抓取内容的方法
Oct 11 PHP
解决Laravel无法使用COOKIE和SESSION的问题
Oct 16 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 base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
2015/07/27 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
React实现轮播效果
2020/08/25 Javascript
详解Django中的权限和组以及消息
2015/07/23 Python
python获取网页中所有图片并筛选指定分辨率的方法
2018/03/31 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
Python解析多帧dicom数据详解
2020/01/13 Python
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
高中生自我评价个人范文
2013/11/09 职场文书
个人生活学习自我评价范文
2013/11/26 职场文书
法律专业实习鉴定
2013/12/22 职场文书
重大事项社会稳定风险评估方案
2014/06/15 职场文书
金融与证券专业求职信
2014/06/22 职场文书
学雷锋标语
2014/06/25 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
医德考评自我评价
2014/09/14 职场文书
教师党员自我评价2015
2015/03/04 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
医德医风学习心得体会
2016/01/25 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书