php实现遍历指定目录并存储目录内所有文件属性信息
- 更新时间:2020-05-18 11:06:15
- 编辑:尚含双
项目需要,需要写一个函数,能够遍历指定目录中的所有文件,而且这个目录中的子目录也要遍历。输出文件的属性信息,并存储。
想想需求,不就是一个ls -al命令吗,实现获取相关属性就好了,再加上一个遍历OK了事。
项目过程中,便于操作,使用了json格式存储,但是也发现了一些问题。谨此记录问题及代码,便于参考。
<?php define('INDEXFORMAT',"dir,name,size,perms,ower,group,ctime,mtime,atime,suffix") ; define('INDEXTXT', 'data/index.txt'); define('INDEXJSON', 'data/index.json'); date_default_timezone_set('Asia/Hong_Kong'); if (file_exists(INDEXTXT)) { unlink(INDEXTXT); } $dir = './'; getIndexFile($dir); /* * get index file * @filename INDEXTXT * @dir string * */ function getIndexFile($dir,$whitelist=''){ $string = ''; $dir = trim($dir); $dir = realpath($dir); $dir = $dir."//"; if(is_file($dir)){ putIndexFile($dir); }else{ putIndexFile($dir); $oDir = @opendir($dir); while($fileName = readdir($oDir)){ if($fileName!='.' && $fileName!='..'){ if(is_file($dir.$fileName)){ putIndexFile($dir.$fileName); }elseif(is_dir($dir.$fileName)){ getIndexFile($dir.$fileName); } } } } if (!file_exists(INDEXTXT)) { return false; } //$data = json_encode(getIndexFromFile()); //file_put_contents(INDEXJSON,$data); return true; } /* * Get Index file * @filename file.index * */ function putIndexFile($file){ if (!file_exists($file)) { return false; } $format = explode(',', INDEXFORMAT); $string = ""; foreach ($format as $key => $value) { if($key !== 0 ){ $string .= "\t"; } $string .= getFileAttr($file,$value); } $string .= "\n"; file_put_contents(INDEXTXT, $string, FILE_APPEND); } /* * * Get index string from index file * @return Array() * */ function getIndexFromFile($flag=''){ if (!file_exists(INDEXTXT)) { return false; } $arr = file(INDEXTXT); $format = explode(',', INDEXFORMAT); $result = array(); if(!empty($flag)){ $key = array_search($flag, $format); if ($key === false) { return false; } foreach ($arr as $str) { $tmp = explode(" ", trim($str)); $result[$flag][] = $tmp[$key]; } }else{ foreach ($arr as $str) { $tmp = explode(" ", trim($str)); foreach ($format as $key => $value) { $result[$value][] = $tmp[$key];//经测试这个操作比较耗时,大概0.7s的样子,慎用! } } } return $result; } /* * get file attributes * @var $file * @var $flag * @return String */ function getFileAttr($file,$flag){ if (!file_exists($file)) { return false; } switch ($flag) { case 'dir': if(is_file($file)) return dirname($file); return realpath($file); break; case 'name': if(is_file($file)) return basename($file); return '-'; break; case 'size': if(is_file($file)) return filesize($file); return '-'; break; case 'perms': return substr(sprintf('%o', fileperms($file)), -4);; break; case 'ower': return fileowner($file); break; case 'group': return filegroup($file); break; case 'ctime': return filectime($file); break; case 'mtime': return filemtime($file); break; case 'atime': return fileatime($file); break; case 'suffix': if(is_file($file)) return substr($file, strrpos($file, '.')+1); return '-'; break; default: return false; break; } } /* * get file size human readable */ function getFileSizeFormat($file){ if(!is_file($file)){ return '-'; } $flags = array('', 'K', 'M', 'G', 'T'); for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024; return round($size, 2).$flags[$i]; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。
相关教程
-
PHP unlink与rmdir删除目录及目录下所有文件方法
这篇文章主要介绍了PHP unlink与rmdir删除目录及目录下所有文件的实例代码,需要的朋友可以参考下
发布时间:2019-06-18
-
php opendir()列出目录下文件的方法代码
这篇文章主要介绍了php opendir()列出目录下所有文件的实例代码的相关资料,需要的朋友可以参考下
发布时间:2019-06-19
-
PHP+MySQL动态网站开发从入门到精通
《PHP+MySQL动态网站开发从入门到精通》本书循序渐进地介绍了PHP 7 MySQL 5.7开发动态网站的主要知识和技能,提供案例、课件、命令速查手册,让你看得懂、学得会、做得出,教你快速成为网站应用开发高手。
大小:36.2 MB网站开发电子书
-
跟兄弟连学PHP
本书是畅销书《细说PHP(第2版)》升级版,以实用为设计目标,包含PHP开发最主流的各项技术,对每一个知识点都进行了深入详细的讲解,并附有大量的实例代码,图文并茂,系统地介绍了PHP的相关技术及其在实际Web开发中的应用
大小:302.8 MBPHP自学电子书
-
PHP5权威编程
《PHP5权威编程》一书为大家全面介绍了PHP 5中的新功能、面向对象编程方法及设计模式,还分析阐述了PHP 5中新的数据库连接处理、错误处理和XML处理等机制。希望能够帮助读者系统了解、熟练掌握PHP,大程度地挖掘PHP的潜力,以更低的成本搭建更加稳健、高效的PHP应用。
大小:25.3 MBPHP5电子书
-
JavaScript for PHP Developers
大小:27.4 MBJavaScript电子书
-
Modern PHP
本书让你会学到关于应用架构、规划、数据库、安全、测试、调试和部署方面的很好实践。如果你具有PHP基础知识,想提高自己的技能,不要错过这本书
大小:28 MBPHP电子书
-
PHP与jQuery开发实例
这书由浅入深地叙述了怎么使用PHP与jQuery搭建高宽比互动的Web运用。每一章聚焦点一个主题风格,探讨Web开发者常常必须处理的一类实际难题。书中以实际上范例及编码表述的方法得出了有目
大小:9.8 MBPHP开发
-
PHP Zend Framework项目开发基础案例教程
《PHP Zend Framework项目开发基础案例教程》以实际项目——XX办公自动化管理系统的开发——为案例,详细介绍使用PHP的企业级框架Zend Framework进行Web应用开发的步骤及关键技术。全书共12章
大小:65 MBPHP电子书
-
PHP开发实例大全:提高卷
《PHP开发实例大全(提高卷)》600经典实例及源码分析 25个应用方向 两卷共1225例 40个方向 分门别类实例一应俱全 供学习、速查、实践练习的超全参考手册 php开发实战1200例 php范例大全 之全新
大小:241.1 MBPHP开发电子书
-
PHP经典实例(第3版)
PHP经典实例(第3版)介绍了专门为PHP 5.4和5.5修订的350个经典技巧,并提供了丰富的示例代码。可以免费使用,另外还讨论了如何解决问题以及这些解决方案为什么可行,希望会对大家有帮助
大小:55.9 MBPHP实例电子书
-
PHP编程入门与应用
在近几年中,PHP已经发展成为世界上最为流行的Web平台,它运行在全球超过1/3的Web服务器上。PHP的发展不仅是数量上的,也是质量上的。越来越多的公司,包括全球500强榜上的公司都依靠PHP来
大小:500 MBPHP编程电子书