显示文件用到的函数有

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. Linux共享对象之编译参数 -fPIC

    转载自:https://www.cnblogs.com/cswuyg/p/3830703.html     在Linux系统中,动态链接文件称为动态共享对象(DSO,Dynamic Shared Ob ...

  2. #pragma pack()用法详解

    博客转载自:http://blog.csdn.net/lime1991/article/details/44536343 1.什么是对齐?为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从 ...

  3. php学习笔记-定义数组和引用数组元素

    上图包含两种定义数组的方法,一种是通过数组索引来创建的,一种是通过array()函数来创建的.

  4. p2444 病毒

    传送门 分析 先用AC自动机将所有字符串存起来,之后我们从根节点跑一遍dfs 判断时我们只需要判断这个环有没有任意一个字符串的结尾就可以判断是否安全了 注意一个节点的信息需要累加上它fail指针所指位 ...

  5. Entity Framework Tutorial Basics(4):Setup Entity Framework Environment

    Setup Entity Framework Environment: Entity Framework 5.0 API was distributed in two places, in NuGet ...

  6. Java分层概念(转)

    Java分层概念(转) 对于分层的概念,似乎之间简单的三层,多了,就有点难以区分了,所以收藏了这个. ervice是业务层 action层即作为控制器 DAO (Data Access Object) ...

  7. Mac常用开发工具

    1.svn客户端 SVN client SmartSVN 2.git客户端 SourceTree | Free Git GUI for Mac and Windows 3.远程windows系统工具( ...

  8. c++ 类成员变量初始化总结

    最近在学习c++,不同类型的c++成员变量在初始化的时候也有很有的区别,查了一些资料之后再此记录一下: #include<iostream> using namespace std; // ...

  9. .net core 2.0 jwt身份认证系统

    经历了很久,.net core 2.0 终于发布了! 之前一直用的core 1.1,升级了2.0后发现认证的机制(Auth)发生了比较大的变化,在1.1中认证配置是在Configure中完成,而在2. ...

  10. Locust压力测试使用总结

    https://blog.csdn.net/jojoy_tester/article/details/77926470  参考网址 上次做接口压力测试前一直研究使用jmeter,本以为可以拿来使用了, ...