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 ...
随机推荐
- QTabWidget和QtabBar的区别
切换标签tab 是QTabBar int QTabWidget::insertTab ( int index, QWidget * page, const QString & label ) ...
- C语言小知识点汇集
1. 三元表达式“?:”冒号两边的两个操作数类型必须一致. 2. 枚举变量的sizeof值同int型一样为4. 3. 为了消除不必要的计算 &&两侧的表达式,当左侧即第1个表达式不成立 ...
- 【第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛-F】等式(因子个数)
题目描述 给定n,求1/x + 1/y = 1/n (x<=y)的解数.(x.y.n均为正整数) 输入描述: 在第一行输入一个正整数T.接下来有T行,每行输入一个正整数n,请求出符合该方程要求的 ...
- 内存保护机制及绕过方法——利用未启用SafeSEH模块绕过SafeSEH
利用加载模块之外的地址绕过safeSEH 前言:文章涉及的概念在之前的文章中都有过详细的讲解 ⑴. 原理分析: 当程序加载进内存中后,处理PE文件(exe,dll),还有一些映射文件,safeSEH ...
- docker 创建镜像,并推送到私有仓库
创建镜像 创建 Dockerfile 镜像命名规则:registyr_url / namespace / depart / name : version 用这个规则创建的镜像,可直接推送到私有仓库 ...
- LeetCode OJ:3Sum Closest(最接近的三数之和)
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- 【机器学习基石笔记】九、LinearRegression
[一] 线性回归直觉上的解释 得到Ein = mean(y - wx)^2 [二] w的推导 Ein = 1/N || xw - y||^2 连续.可微.凸函数 在各个方向的偏微分都是0 Ein = ...
- 解决PKIX问题:unable to find valid certification path to requested target
第一步:执行方式:java InstallCert hostname eg:java InstallCert www.cebbank.com 第二步:然后输 ...
- windows下Perl如何读取大文件的最后一行(总结)
Perl中读取文件最后一行的方法很多,比如 (1)将文件读入数组,取最后一个元素 open (FILE,"file.txt") or die "$!"; my ...
- 服务器与客户端数据交互 (json)
服务器返回到客户端json对象,是什么类型,而用ajax处理后,变成什么了. > 猜测1:服务器返回的数据带双引号: "返回值",理由:因为返回的类型都是字符串. 结果无 ...