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遍历数组的方法分享
Mar 22 PHP
php文件上传的例子及参数详解
Dec 12 PHP
PHP高级编程实例:编写守护进程
Sep 02 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
Jan 04 PHP
php+xml编程之xpath的应用实例
Jan 24 PHP
Yii使用Captcha验证码的方法
Dec 28 PHP
THINKPHP截取中文字符串函数实例代码
Mar 20 PHP
php 静态属性和静态方法区别详解
Apr 09 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
Yii Framework框架使用PHPExcel组件的方法示例
Jul 24 PHP
php5.6.x到php7.0.x特性小结
Aug 17 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跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
JavaScript实用技巧(一)
2010/08/16 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
5个javascript的数字格式化函数分享
2011/12/07 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
JavaScript中的依赖注入详解
2015/03/18 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
js判断文件格式及大小的简单实例(必看)
2016/10/11 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
VsCode与Node.js知识点详解
2019/09/05 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python过滤列表用法实例分析
2016/04/29 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
python FTP批量下载/删除/上传实例
2019/12/22 Python
python 实现简单的FTP程序
2019/12/27 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
Prototype是怎么扩展DOM的
2014/10/01 面试题
优秀班干部事迹材料
2014/01/26 职场文书
2014年情人节活动方案
2014/02/16 职场文书
陈欧广告词
2014/03/14 职场文书
市场总经理岗位职责
2014/04/11 职场文书
十佳青年事迹材料
2014/08/21 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
python turtle绘图命令及案例
2021/11/23 Python
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL