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. 数据库连接池 c3p0 druid

    druid 数据库连接池 c3p0 使用C3P0数据源时需要依赖 mchange-commons-java-0.2.3.4.jar包.缺少该jar包则会报错!

  2. 八行代码解决八皇后问题(c++)

    说的有点夸装,实际上并不只是巴航代码,加上前面的变量声明之类的一共有40多行的样子吧,好像是在知乎上看到的,现在有时间再把它写下来: 其中用到了一些c++11特性,例如lambda 以及给予范围的 f ...

  3. SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://blog.csdn.net/forezp. http://blog.csdn.net/forezp/art ...

  4. jquery 中多条件选择器,相对选择器,层次选择器的区别

    一.Jquery常用的过滤选择器如下所示: 1.:first,选取第一个元素,比如$("div:first")选取第一个div元素 2.:last,选取最后一个元素,比如$(&qu ...

  5. C++中const指针用法汇总

    这里以int类型为例,进行说明,在C++中const是类型修饰符: int a; 定义一个普通的int类型变量a,可对此变量的值进行修改. const int a = 3;与 int const a ...

  6. WWDC 2017, 让我们看看 iTunesConnect 有了哪些不同

    距离 WWDC 2017 过去已经有 7 天了,小伙伴们是不是已经发现我们的苹果后台和之前的界面有些略微的不同,如果有心的朋友下了 iOS 11 beta 版就会发现设备上的 App Store 界面 ...

  7. 目标跟踪之ECO:Efficient Convolution Operators for Tracking

    一. 相关滤波算法总结 作者首先分析了 影响相关滤波算法效率 和 导致过拟合 的几个原因: 1)Model Size (模型大小) 包括两个方面: - 模型层数,对应多分辨率 Sample,比如多层 ...

  8. SBT构建工具

    SBT Simple Build Tool. A interactive build tool. install windows可直接到http://www.scala-sbt.org/0.13/do ...

  9. canvas 绘制环形进度条

    结果: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...

  10. Comparing Xamarin and Delphi XE5 to Xcode for Cross Platform Mobile App Development

    Comparing Xamarin and Delphi XE5 to Xcode for Cross Platform Mobile App Development If you are consi ...