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图片上传程序
Mar 27 PHP
php实现简单洗牌算法
Jun 18 PHP
浅析php变量修饰符static的使用
Jun 28 PHP
PHP curl 获取响应的状态码的方法
Jan 13 PHP
PHP中exec函数和shell_exec函数的区别
Aug 20 PHP
php创建多级目录的方法
Mar 24 PHP
用PHP代码给图片加水印
Jul 01 PHP
PHP文件上传类实例详解
Apr 08 PHP
php判断是否为ajax请求的方法
Nov 29 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
TP5框架安全机制实例分析
Apr 05 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利用str_replace防注入的方法
2013/11/10 PHP
php实现将二维关联数组转换成字符串的方法详解
2017/07/31 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
Firefox outerHTML实现代码
2009/06/04 Javascript
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
jquery实现tr元素的上下移动示例代码
2013/12/20 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
jQuery中focus事件用法实例
2014/12/26 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
2017/09/30 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
深入理解Python中的元类(metaclass)
2015/02/14 Python
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
python字典get()方法用法分析
2015/04/17 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
pycharm 取消默认的右击运行unittest的方法
2018/11/29 Python
python利用7z批量解压rar的实现
2019/08/07 Python
迪奥美国官网:Dior美国
2019/12/07 全球购物
计算机专业推荐信范文
2013/11/27 职场文书
实习鉴定范文
2013/12/19 职场文书
大学毕业生个人自荐信范文
2014/01/08 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
生物科学专业自荐书
2014/06/20 职场文书
女生节标语
2014/06/26 职场文书
商铺消防安全责任书
2014/07/29 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
毕业实习计划书
2015/01/16 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
2019思想汇报范文
2019/05/21 职场文书
八年级作文之友谊
2019/12/02 职场文书