PHP读取文件夹数据,并分页

protected function read_all ($dir){
// 确保目录有权限进入
if(!is_dir($dir)) return false;
$handle = opendir($dir);
if($handle){
while(($fl = readdir($handle)) !== false){ // 从目录句柄中读取条目
// 处理成绝对路径
$temp = $dir.DIRECTORY_SEPARATOR.$fl;
// 判断是目录还是文件,并去除 . 和 ..
if(is_dir($temp) && $fl!='.' && $fl != '..'){
$data[] = [
'type' => 'folder',
'name' => $temp,
'only_name' => $fl,
'update_time' => date("Y-m-d H:i:s",filemtime($temp))
];
}else{
if($fl!='.' && $fl != '..'){
$data[] = [
'type' => 'file',
'name' => $temp,
'only_name' => $fl,
'update_time' => date("Y-m-d H:i:s",filemtime($temp))
];
}
}
}
}
// 得到目录文件和文件夹数据,并返回
return $data;
}
分页实现,每次都读取全部数据,根据页数,截取部分展示。
public function index(){
// 获取目标路径所有文件夹及其文件数据
$root_path = C('DEFAULT_PATH');
$target_path = $_GET['target_path'] ? $_GET['target_path'] : $root_path;
if(strpos($target_path,$root_path) !== 0){
$target_path = $root_path;
}
$relative_path = str_replace($root_path,"",$target_path);
$this->assign('relative_path',$relative_path);
$this->assign('root_path',$root_path);
$this->assign('target_path',$target_path);
$all_data = $this->read_all($target_path);
// 页数参数,默认第一页
$page = $_GET['page'] ? $_GET['page'] : 1;
// 每页数目
$step = C('PAGE_NORMAL_COUNT');
// 每次获取起始位置
$start = ($page-1)*$step;
// 获取数组中当前页的数据
$page_data = array_slice($all_data,$start,$step);
$this->assign('page_data',$page_data);
// 获取分页所需数据,支持传递其他条件参数
$page_model = D('Page');
$model_flag = $page_model->arr($all_data,$page,$step,'&target_path='.$target_path);
$this->assign('allPage',$model_flag);
$this->display();
}
下面看看Page具体实现
html部分
<div class="pagination" id="pages" style="float:right;">
<ul>
<li><a href="__ACTION__?page=1{$allPage['prefix_page']}{$allPage.tail}">首页</a></li>
<li><a href="__ACTION__?page={$allPage['prev_page']}{$allPage['prefix_page']}{$allPage.tail}">上一页</a></li>
<php> for ($i = $allPage['page_start']; $i <= $allPage['page_end']; $i++) {
if ($i == $allPage['page']) { </php>
<li class="active"> <a href="__ACTION__?page=<php>echo $i;</php>{$allPage['prefix_page']}{$allPage.tail}">
<php> echo $i; </php>
</a> </li>
<php> } else { </php>
<li><a href="__ACTION__?page=<php>echo $i;</php>{$allPage['prefix_page']}{$allPage.tail}">
<php> echo $i; </php>
</a></li>
<?php
}
}
?>
<li><a href="__ACTION__?page={$allPage['next_page']}{$allPage['prefix_page']}{$allPage.tail}">下一页</a></li>
<li><a href="__ACTION__?page={$allPage['page_all']}{$allPage['prefix_page']}{$allPage.tail}">尾页</a></li>
</ul>
</div>
分页数据部分
/**
* 数组分页
*/
public function arr($arr,$page,$page_step='',$prefix_page='') {
// 第一返回总数目
$data['count'] = count($arr);
$page_step = $page_step ? $page_step : C('PAGE_NORMAL_COUNT');
//第二返回总页数
$data['page_all']=(int)ceil($data['count']/$page_step);
//第三返回底标的分页数组
$page_start=$page-2;
if($data['page_all']>5){
if($page_start<=0){
$page_start=1;
$page_end=5;
}else{
$page_end=$page+2;
if($page_end>=$data['page_all']){
$page_end=$data['page_all'];
$page_start=$page_end-4;
}
}
}else{
$page_start=1;
$page_end=$data['page_all'];
}
$data['page_start']=$page_start;
$data['page_end']=$page_end;
//第四返回当前页
$data['page']=$page;
//第五 返回上一页和下一页
$prev_page=$page-1;
if($prev_page<=0){
$prev_page=1;
}
$next_page=$page+1;
if($next_page>=$data['page_all']){
$next_page=$data['page_all'];
}
$data['prev_page']=$prev_page;
$data['next_page']=$next_page;
// 第六返回其他条件参数
$data['prefix_page']=$prefix_page;
return $data;
}
分页的原理,就是获取上一页,下一页,首页,尾页,当前页,当前页区间的几页数据,并展示,并实现跳转。并根据传入的page获取相应的数据的功能。
PHP读取文件夹数据,并分页的更多相关文章
- C#读取文件夹下所有指定类型,并返回相应类型数据
C#读取文件夹下所有文件 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...
- python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件
python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...
- c++读取文件夹及子文件夹数据
这里有两种情况:读取文件夹下所有嵌套的子文件夹里的所有文件 和 读取文件夹下的指定子文件夹(或所有子文件夹里指定的文件名) <ps,里面和file文件有关的结构体类型和方法在 <io.h ...
- R8—批量生成文件夹,批量读取文件夹名称+R文件管理系统操作函数
一. 批量生成文件夹,批量读取文件夹名称 今日,工作中遇到这样一个问题:boss给我们提供了200多家公司的ID代码(如6007.7920等),需要根据这些ID号去搜索下载新闻,从而将下载到的新闻存到 ...
- Matlab 读取文件夹中所有的bmp文件
将srcimg文件下的bmp文件转为jpg图像,存放在dstimg文件夹下 str = 'srcimg'; dst = 'dstimg'; file=dir([str,'\*.bmp']); :len ...
- php 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名
<?php // 读取网页源码$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLO ...
- C#读取文件夹大小
今天需要做一个读取文件夹大小的功能,为了避免遍历文件夹下所有文件并求出总大小,找到如下的好方法: 首先要在项目中引用一个COM组件:Microsoft Scripting Runtime,这个在Ref ...
- java读取文件夹下所有文件并替换文件每一行中指定的字符串
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...
- QT 读取文件夹下所有文件(超级简单的方法,不需要QDirIterator)
之前,用标准C++写过读取文件夹.现在用QT重写代码,顺便看了下QT如何实现,还是相当简单的.主要用到QDir,详细文档可见这里 A program that lists all the files ...
随机推荐
- nyoj-5-kmp裸题
题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=5 kmp统计匹配串出现次数,贼尴尬好久没做字符串题目,一开始求得是文本串的next ...
- 转载 IOS开发之---static变量
Objective-C 支持全局变量 主要有两种实现方式: (1)第一种和C/C++中的一样, 使用"extern"关键词: (2)另外一种就是使用单例实现. (比如我们经常会把一 ...
- a标签设置锚点定位div
<a href="#5F">锚点5</a> </br></br></br></br></br>& ...
- 《锋利的jQuery》读书笔记(DOM+事件)
前阵子买了一批书,就从锋利的jQuery看起吧,书中一些太过常规以及没有强记必要性的操作就不记录了. 1.DOM加载后执行JS $(document).ready(function(){ //.... ...
- matlab批量转化img到gray
path = 'D:\宝贝儿数据集\COIL-3D\coil-100\'; save_path = 'D:\宝贝儿数据集\COIL-3D\coil-100-gray\'; file=dir([path ...
- Reinforcement Learning Q-learning 算法学习-4
Q-learning 相关的资料 https://www.youtube.com/watch?v=V1eYniJ0Rnk google deepmind 的Q-learning 算法打游戏的一个很酷的 ...
- 关于python模拟登录的一点实践
不久前,通过网上查阅各种资料,一直想利用python来实现模拟登录的功能,通过csdn汪海的博客学会了一点,但也只能算个皮毛,亦或皮毛都算不上. 边查阅资料边写一个小东西,起初想写一个程序,通过暴力破 ...
- eclipse导出文件上传服务器
[1]导出 选择项目 文件导出 输入导出路径如f盘ftp文件夹下 [2]利用scr上传服务器工具 上传到 home/tomcat/app/项目名称/ 不导入upload文件 [待完善]
- bzoj 4987 Tree
Written with StackEdit. Description 从前有棵树. 找出\(K\)个点\(A_1,A_2,-,A_K\). 使得\(∑dis(A_i,A_{i+1}),(1<= ...
- kali视频学习(6-10)
第三周 kali视频(6-10)学习 6.信息搜集之主机探测 7.信息搜集之主机扫描(nmap使用) 8.信息搜集之指纹识别 9.信息搜集之协议分析 10.漏洞分析之OpenVAS安装 6.信息搜集之 ...