php 遍历 目录,php实现遍历指定目录并存储目录内所有文件属性信息

遍历指定目录,并存储目录内所有文件属性信息的php代码

c8bc3ddcfdbbfecb8dfd6f369fb15862.png

7f4d6b98af9a5a7c1422abf02bfb6194.png

项目需要,需要写一个函数,能够遍历指定目录中的所有文件,而且这个目录中的子目录也要遍历。输出文件的属性信息,并存储。

想想需求,不就是一个ls -al命令吗,实现获取相关属性就好了,再加上一个遍历OK了事。

项目过程中,便于操作,使用了json格式存储,但是也发现了一些问题。谨此记录问题及代码,便于参考。

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];

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

您可能感兴趣的文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值