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. neutron dhcp ha 实验

    4个节点(controller, network,2 compute nodes) 1.0   on the network node 1.1 set –I ‘s/start] on/#start\ ...

  2. java PreparedStatement和statement的区别

    1. PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象.2.作为 St ...

  3. selenium学习笔记(HTMLTestRunner测试报告)

    之前提到selenium加入unittest框架.可以引入HTMLTestRunner扩展.以此来生成测试报告 首先是分享下载的百度云地址 http://pan.baidu.com/s/1pKUItW ...

  4. docker建立和共享文件(服务器和docker之间的共享)

    建立序列号:sudo docker run -it domimiek/deep-base  /bin/bash   回撤后会出现一个序列号(记住) 开始:sudo docker start 序列号 当 ...

  5. Linux下的目录结构

    1./ -根 每个文件和目录从根目录开始 只有root用户具有该目录下的写权限,请注意,/root是root用户的主目录,这与/.不一样. 2. /bin  -用户二进制文件 包含二进制可执行的文件 ...

  6. 偶然遇到的samba服务器权限问题

    也许有一些参考价值. CentOS 6.4使用命令service smb start启动samba服务器,在配置文件都正确,而且对应的共享目录权限也正确,使用smbpasswd添加了用户,这之后,使用 ...

  7. Java 实现--时间片轮转 RR 进程调度算法

    时间片轮转(Round-Robin)调度算法是操作系统一种比较公平的进程调度的方式,这种方式使得就绪队列上的所有进程在每次轮转时都可以运行相同的一个时间片. 基本原理 算法实现原理是,按进程到达顺序( ...

  8. 推荐使用typora

    最近在网上接触到一款全新的markdown写作工具--typora. 现在它已经是我的主要写作工具了. 甚至我也也会利用它安排自己的工作和任务. typora介绍 下载链接 特色:可以即时渲染mark ...

  9. 同一局域网环境下的arp欺骗和中间人攻击(mac)

    最近读了一篇有关arp欺骗和中间人攻击的文章,于是乎就想着自己实现一下,顺便验证下微信在回话劫持后的安全性. 1.本机环境 Macbook Air:OS X 10.11 El Captain 2.推荐 ...

  10. libwebsockets 运行问题

    /****************************************************************************** * libwebsockets 运行问题 ...