显示文件用到的函数有

1、urlencode($str):编码URL字符串,便于将字符串编码并将其用于URL的请求部分

2、urldecode($str):解码已经编码的URL字符串,返回解码后的字符串

3、iconv('GB2312','UTF-8',$str):将字符串$str,编码由GB2312转变为utf-8;解决中文乱码

4、file_exists($path):检查文件或目录是否存在,$path规定要检查的路径

5、stripos($str,$find,$start):查找$find,在字符串中第一次出现的位置,没找到返回false

6、chdir(directory):directory规定新的当前目录

7、getcwd():获取当前目录

8、opendir($path):打开文件,$path要打开的目录路径

9、readdir(dir_handle):函数返回目录中下一个文件的文件名(如:文件夹中的文件名),dir_handle,可选,指定之前有opendir()打开的目录句柄资源

10、filesize($filename):返回指定文件的大小

11、filectime($filename):返回指定文件的创建时间

12、filemtime($filename):返回指定文件的最后修改时间

13、array_column($arr,$column_key):$column_key,需要返回的列,可以是索引数组的整数索引,或者是关联数组的列的字符串键值,也可以是null;PHP版本要5.5+

14、array_multisort($arr,sorting order,sorting type):函数返回排序数组,sorting order规定排列顺序(SORT_ASC升序【A-Z】,SORT_DESC降序【Z-A】)

15、is_dir():检查指定的文件是否是目录

public function index($currdir=null){

  //解决中文文件乱码

  $currdir = urldecode($currdir);

  $currdir = iconv('UTF-8','GB2312',$currdir);

  if($currdir){

    //判断目录是否存在

    if(file_exists($currdir)){

      //查看权限,最大权限是项目根目录

      if(stripos($currdir,ROOT_PATH) === 0 && stripos($currdir,ROOT_PATH,'..') === false){

        chdir($currdir);//$currdir 规定新的当前目录(打开目录,如:查看子目录、上级目录)

      }

    }

  }

  $rootdir = getcwd();//获取当前路径

  $dir = opendir($rootdir);//打开文件

  $data = [];

  $num['dir'] = 0;

  $num['file'] = 0;

  //循环读取文件

  while($filename = readdir($dir)){

    if($filename !='.' && $filename !='..'){//显示目录到页面不要上级目录‘..’和当前目录‘.’

      if(is_dir($filename)){

        $arr['icon'] = '#icon-mulu';//输出目录图标

        $arr['flag'] = 1;//标记是否是目录

        $num['dir']++;//记录目录的数量

      }else{

        $arr['icon'] = '#icon-wenjian';//输出文件图标

        $arr['flag'] = 1;//判断是否是文件

        $num['file'] ++;//记录文件的数量

      }

      $arr['currdir'] = iconv('GB2312','UTF-8',getcwd().'\\'.$filename);

      $arr['name'] = $filename;//文件名

      $arr['size'] = filesize($filename);//文件大小

      $arr['ctime'] = filectime($filename);//文件创建时间

      $arr['mtime'] = filemtime($filename);//文件最后修改时间

      $data[] = $arr;

    }

  }

  //对文件和文件夹分类排序

  array_multisort(array_column($data,'flag'),SORT_DESC,$data);

  $this->assign('dirs',$data);

  return view();

}

/**
* 文件大小转换(B、KB、MB、TB)显示
*/
function size_format($size = 0, $num = 0)
{
$unit = ['B', 'KB', 'MB', 'TB'];
$i = 0;
while ($size > 1024) {
$size /= 1024;//$size = $size/1024
$i++;
}
return round($size, $num) . $unit[$i];//round()保留小数点
}

HTML模板

<tbody>
{volist name="dirs" id="v"}
<tr>
<td class="fileicon">
<svg class="my-icon" aria-hidden="true">
<use xlink:href="{$v.icon}"></use>
</svg>
<a href="{$v.flag?'?currdir='.$v.currdir:'javascript:;'}">{$v.name|iconv='GB2312','UTF-8',###}</a>
</td>
<td>{$v.flag?"文件夹":size_format($v.size,1)}</td>
<?php $p=urlencode($v['currdir']);?>
<td>{$p|getpics=###,40}</td>
<td>{$v.ctime|date="Y-m-d",###}</td>
<td>{$v.mtime|date="Y-m-d",###}</td>
<td>
<span class="cz">
      <a class="filelink" href="javascript:;" onclick="DeleteFile('{$v.currdir|urlencode=###}')">删除</a> |       {eq name="v.flag" value="0"}
      <a class="filelink" href="{:url('file/edit')}?file={$v.currdir|urlencode=###}" >编辑</a> |
      {/eq}
      <a class="filelink" href="javascript:;" onclick="ReName('{$v.currdir|urlencode=###}','{$v.currdir|basenamecn=###}')">重命名</a>
{eq name="v.flag" value="0"}
|<a class="filelink" href="{:url('file/download')}?currdir={$v.currdir|urlencode=###}">下载</a>
{/eq}       </span>
</td>
</tr>
{/volist}
</tbody>

PHP、thinkPHP5.0开发网站文件管理功能(一)显示文件的更多相关文章

  1. PHP、thinkPHP5.0开发网站文件管理功能(三)重命名文件

    public function renames(){ if(request()->isAjax()){ $file = iconv('UTF-8','GB2312',urldecode(inpu ...

  2. PHP、thinkPHP5.0开发网站文件管理功能(二)删除文件

    1.is_dir():检查指定的文件是否是目录 2.scandir():返回指定目录中的文件和目录数组 3.unlink():删除文件,如果删除的文件不存在会报错,加@抑制报错 public func ...

  3. PHP、thinkPHP5.0开发网站文件管理功能(四)下载文件

    public function download($currdir = null){ $file = urldecode($currdir); $file = iconv('UTF-8', " ...

  4. PHP、thinkPHP5.0开发网站文件管理功能(三)编辑文件

    public function edit(){ $file = iconv('UTF-8','GB2312',urldecode(input('file'))); if(empty($file)|| ...

  5. ThinkPHP5.0 开发手册

    ThinkPHP5.0开发手册地址 https://www.kancloud.cn/manual/thinkphp5/118003 此博文仅仅作为个人笔记存储,没有广告,宣传的意图

  6. 微信公众号php从0开发,包括功能(自定义菜单,分享)

    之前写的一篇微信公众号文章. 工作需要,进行此次调研,并记录开发过程. 开发目的,页面授权,页面获取用户头像,用户昵称 微信id, 分享页面. 微信订阅号 无法获取用户个人信息 写在记录前,公众号也是 ...

  7. thinkphp5.0开发规范

    命名规范 ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范: 目录和文件 目录不强制规范,驼峰及小写+下划线模式均支持: 类库.函数文件统一以.php为后缀: 类的文 ...

  8. Thinkphp5.0实战开发二------自动生成目录结构

    序言 ThinkPHP5.0 具备自动创建功能,可以用来自动生成需要的模块及目录结构和文件等,自动生成主要调用\think\Build 类库.ThinkPHP5.0中模块文件夹在application ...

  9. ThinkPHP5.0框架开发--第4章 TP5.0路由

    ThinkPHP5.0框架开发--第4章 TP5.0路由 第4章 TP5.0 路由 ================================================== 上次复习 1. ...

随机推荐

  1. C++面向对象类的实例题目六

    问题描述: 编写一个程序计算两个给定长方形的面积,其中在设计类成员函数addarea()(用于计算两个长方形的总面积)时使用对象作为参数. 程序代码: #include<iostream> ...

  2. redis 有用

     浅谈redis   (1)什么是redis? Redis 是一个基于内存的高性能key-value数据库. (有空再补充,有理解错误或不足欢迎指正)   (2)Reids的特点 redis本质上是一 ...

  3. 100085G GCD Guessing Game

    传送门 题目大意 给定一个数N,现在又一个数x,在1~N之间,现在每次可以猜一个数a,返回gcd(x,a),问说最少猜几次可以确定x. 分析 这个题应该可以算是贪心,但是没人知道这样为啥是对的(雾), ...

  4. easyUI datagrid 分页参数page和rows

    Struts2获取easyUI datagrid 分页参数page和rows 用pageHelper分页时,只要是能够获取前台传来的两个参数page和rows基本就完成了很大一部分. 获取方法:定义两 ...

  5. Android中常见的内存泄漏

    为什么会产生内存泄漏? 当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏. ...

  6. .NET 图片上传接收类

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  7. 删除XML文档中某节点

    前几天Insus.NET在写了一系列XML文档进行操作.创建 <怎样创建XML文档> http://www.cnblogs.com/insus/p/3276944.html       & ...

  8. UIPasteboard

    1.UIPasteboard 简介 顾名思义,UIPasteboard 是剪切板功能,因为 iOS 的原生控件 UITextField.UITextView.UIWebView, 我们在使用时如果长按 ...

  9. 树形DP--求树上任意两点间距离和

    例题:HDU2376   HDU6446(2018CCPC网络赛) 思路:求任意两点间距离和可以转换为->路径长度乘经过路径次数的和. 求经过次数:设这条边两端的点,被经过的次数分别为A和B,那 ...

  10. Mysql 5.6主从搭建

    mysql设置主从的重要性和必要性不必多说,下面开始详细说明如何搭建主从. 1.主服务器上创建一个用于复制的账户. mysql'; mysql> flush privileges; 2.主服务器 ...