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网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
php self,$this,const,static,->的使用
Oct 22 PHP
PHP操作xml代码
Jun 17 PHP
服务器web工具 php环境下
Dec 29 PHP
PHP生成sitemap.xml地图函数
Nov 13 PHP
迅速确定php多维数组的深度的方法
Jan 07 PHP
Laravel框架路由配置总结、设置技巧大全
Sep 03 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
yii实现使用CUploadedFile上传文件的方法
Dec 28 PHP
php实现表单提交上传文件功能
May 28 PHP
Yii框架where查询用法实例分析
Oct 22 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
Oct 22 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 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
用javascript实现画板的代码
2007/09/05 Javascript
JS 日期验证正则附asp日期格式化函数
2009/09/11 Javascript
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
Python读取mat文件,并保存为pickle格式的方法
2018/10/23 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
python 实现目录复制的三种小结
2019/12/04 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
Marlies Dekkers内衣法国官方网上商店:国际知名的荷兰内衣品牌
2019/03/18 全球购物
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
行政总经理岗位职责
2013/12/05 职场文书
美发活动策划书
2014/01/14 职场文书
带薪年假请假条
2014/02/04 职场文书
师德师风事迹材料
2014/12/20 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
晚会主持人开场白台词
2015/05/28 职场文书