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读取文件夹数据,并分页的更多相关文章

  1. C#读取文件夹下所有指定类型,并返回相应类型数据

    C#读取文件夹下所有文件 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...

  2. python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件

    python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...

  3. c++读取文件夹及子文件夹数据

    这里有两种情况:读取文件夹下所有嵌套的子文件夹里的所有文件  和 读取文件夹下的指定子文件夹(或所有子文件夹里指定的文件名) <ps,里面和file文件有关的结构体类型和方法在 <io.h ...

  4. R8—批量生成文件夹,批量读取文件夹名称+R文件管理系统操作函数

    一. 批量生成文件夹,批量读取文件夹名称 今日,工作中遇到这样一个问题:boss给我们提供了200多家公司的ID代码(如6007.7920等),需要根据这些ID号去搜索下载新闻,从而将下载到的新闻存到 ...

  5. Matlab 读取文件夹中所有的bmp文件

    将srcimg文件下的bmp文件转为jpg图像,存放在dstimg文件夹下 str = 'srcimg'; dst = 'dstimg'; file=dir([str,'\*.bmp']); :len ...

  6. php 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名

    <?php // 读取网页源码$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLO ...

  7. C#读取文件夹大小

    今天需要做一个读取文件夹大小的功能,为了避免遍历文件夹下所有文件并求出总大小,找到如下的好方法: 首先要在项目中引用一个COM组件:Microsoft Scripting Runtime,这个在Ref ...

  8. java读取文件夹下所有文件并替换文件每一行中指定的字符串

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...

  9. QT 读取文件夹下所有文件(超级简单的方法,不需要QDirIterator)

    之前,用标准C++写过读取文件夹.现在用QT重写代码,顺便看了下QT如何实现,还是相当简单的.主要用到QDir,详细文档可见这里 A program that lists all the files ...

随机推荐

  1. RxJava+RxAndroid+MVP入坑实践(基础篇)

    转载请注明出处:http://www.blog.csdn.net/zhyxuexijava/article/details/51597230.com 前段时间看了MVP架构和RxJava,最近也在重构 ...

  2. JS前端重点 -- Generator 函数的含义与用法

    Generator 函数的含义与用法 1.generator http://www.ruanyifeng.com/blog/2015/04/generator.html http://it.taocm ...

  3. (http请求+cookie)的交互流程

    如果步骤5携带的是过期的cookie或者是错误的cookie,那么将认证失败,返回至要求身份认证页面. 当前 Cookie 有两个版本:Version 0 和 Version 1.通过它们有两种设置响 ...

  4. 0 与 “0" 与 '\0' 与 '0'相互之间的区别

    1. '\0'和‘0’都是字符,对应的ASCII值分别是0和48. 2. 0表示一个数字.也可以表示ASCII值,对应字符'\0'. 3. “0”表示字符串,第一个字符是'0'.

  5. 有云Ceph课堂:使用CivetWeb快速搭建RGW

    转自:https://www.ustack.com/blog/civetweb/ 优秀的开源项目正在改变传统IT,OpenStack名头最响,已经成为了IaaS的事实标准.Ceph同样颇有建树,通过其 ...

  6. ipmitool 查看硬件信息

    [root@75-6-25-yf-core ~]# cat /var/log/mcelog MCE 0HARDWARE ERROR. This is *NOT* a software problem! ...

  7. 21-THREE.JS 将法线矢量映射到RGB颜色的材质

    <!DOCTYPE html> <html> <head> <title></title> <script src="htt ...

  8. 【spark】常用转换操作:reduceByKey和groupByKey

    1.reduceByKey(func) 功能: 使用 func 函数合并具有相同键的值. 示例: val list = List("hadoop","spark" ...

  9. 【scala】定义变量和函数

    1.定义变量 Scala的变量分为两种,val和var. val跟java的final变量类似,一旦初始化就不能被重新赋值. var类似于java的非final变量,在整个生命周期内var可以被重新赋 ...

  10. NHibernate的几种查询方式

    SQL:普通SQL查询(也就是SQLServer,Oracle,Sybase等数据库的查询语句,建议使用基于TSQL-92) 核心对象:CreateSQLQuery IList list = sess ...