Welcome

首页 / 网页编程 / PHP / 遍历指定目录,并存储目录内所有文件属性信息的php代码


项目需要,需要写一个函数,能够遍历指定目录中的所有文件,而且这个目录中的子目录也要遍历。输出文件的属性信息,并存储。
想想需求,不就是一个ls -al命令吗,实现获取相关属性就好了,再加上一个遍历OK了事。
项目过程中,便于操作,使用了json格式存储,但是也发现了一些问题。谨此记录问题及代码,便于参考。

<?phpdefine("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 .= "	";}$string .= getFileAttr($file,$value); }$string .= "
";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];}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。