PHP、thinkPHP5.0开发网站文件管理功能(一)显示文件
显示文件用到的函数有
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开发网站文件管理功能(一)显示文件的更多相关文章
- PHP、thinkPHP5.0开发网站文件管理功能(三)重命名文件
public function renames(){ if(request()->isAjax()){ $file = iconv('UTF-8','GB2312',urldecode(inpu ...
- PHP、thinkPHP5.0开发网站文件管理功能(二)删除文件
1.is_dir():检查指定的文件是否是目录 2.scandir():返回指定目录中的文件和目录数组 3.unlink():删除文件,如果删除的文件不存在会报错,加@抑制报错 public func ...
- PHP、thinkPHP5.0开发网站文件管理功能(四)下载文件
public function download($currdir = null){ $file = urldecode($currdir); $file = iconv('UTF-8', " ...
- PHP、thinkPHP5.0开发网站文件管理功能(三)编辑文件
public function edit(){ $file = iconv('UTF-8','GB2312',urldecode(input('file'))); if(empty($file)|| ...
- ThinkPHP5.0 开发手册
ThinkPHP5.0开发手册地址 https://www.kancloud.cn/manual/thinkphp5/118003 此博文仅仅作为个人笔记存储,没有广告,宣传的意图
- 微信公众号php从0开发,包括功能(自定义菜单,分享)
之前写的一篇微信公众号文章. 工作需要,进行此次调研,并记录开发过程. 开发目的,页面授权,页面获取用户头像,用户昵称 微信id, 分享页面. 微信订阅号 无法获取用户个人信息 写在记录前,公众号也是 ...
- thinkphp5.0开发规范
命名规范 ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范: 目录和文件 目录不强制规范,驼峰及小写+下划线模式均支持: 类库.函数文件统一以.php为后缀: 类的文 ...
- Thinkphp5.0实战开发二------自动生成目录结构
序言 ThinkPHP5.0 具备自动创建功能,可以用来自动生成需要的模块及目录结构和文件等,自动生成主要调用\think\Build 类库.ThinkPHP5.0中模块文件夹在application ...
- ThinkPHP5.0框架开发--第4章 TP5.0路由
ThinkPHP5.0框架开发--第4章 TP5.0路由 第4章 TP5.0 路由 ================================================== 上次复习 1. ...
随机推荐
- OpenStack基础及概念
一.云计算基本概念解析 1.1什么是云计算 云计算:代表计算资源向云水循环一样,按需分配,循环利用. 1.2.云计算分类 狭义:IT基础设施的交互和使用模式,通过网络以按需,易扩展的方式 ...
- Luogu 2824 [HEOI2016/TJOI2016]排序
BZOJ 4552 挺妙的解法. 听说这题直接用一个桶能拿到$80 \ pts$ 发现如果是一个排列的话,要对这个序列排序并不好做,但是假如是$01$序列的话,要对一个区间排序还是很简单的. 发现最后 ...
- 数据结构_bubble_sort
问题描述 给定一个 1~N 的排列 P,即 1 到 N 中的每个数在 P 都只出现一次. 现在要对排列 P 进行冒泡排序,代码如下:for (int i = 1; i <= N; ++i)for ...
- vimrc 我的专属vim配置
set nu set wrap syntax on filetype on "打开vim文件类型自动检测功能 set autoindent set smartindent set ruler ...
- dubbo结果缓存机制
此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. dubbo提供了三种结果缓存机制: lru:基于最近最少使用原则删除多余缓存,保持最热的数据被缓存 thre ...
- ubuntu - 安装sqoop
解析过程 参考:https://www.cnblogs.com/qingyunzong/p/8807252.html#_label4 一.下载 二.解压到指定目录 三.配置sqoop环境变量并生效 四 ...
- Git解决pull无法操作成功
https://blog.csdn.net/chenjunfengf/article/details/78301957 场景 在git pull的时候,如果本地代码有改动,而服务器上代码也已经被其他人 ...
- C#中==与equal的区别
值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地 ...
- P4559 [JSOI2018]列队
\(\color{#0066ff}{ 题目描述 }\) 作为一名大学生,九条可怜在去年参加了她人生中的最后一次军训. 军训中的一个重要项目是练习列队,为了训练学生,教官给每一个学生分配了一个休息位置. ...
- webpack 的使用教程
webpack 的使用教程 今天接触webpack,就着官网上的教程一步一步的玩,把自己的理解总结以便和大家交流 webpack的主要特点 1. 可以把js,css,image,甚至文本当成模块来处理 ...