现在的位置: 首页 > 综合 > 正文

遍历文件夹,计算文件夹大小,超出范围则删除早期文件

2018年05月21日 ⁄ 综合 ⁄ 共 1536字 ⁄ 字号 评论关闭
<?php
	header("Content-type: text/html; charset=utf-8"); 
	/**
	 * 遍历目录,计算文件大小
	 * @prama $dir:文件夹路径
	 */
	function getDirSize($dir)
    	{ 
    		file_exists($dir) or die(" 文件目录不存在!<br/>");
        	$handle = opendir($dir);
			$sizeResult = "";
			$timeResult=array();
       	 	while (false!==($FolderOrFile = readdir($handle)))
        	{ 
            	if($FolderOrFile != "." && $FolderOrFile != "..") 
            	{ 
            		$fileName=$dir.DIRECTORY_SEPARATOR.$FolderOrFile;	//DIRECTORY_SEPARATORl显示系统分隔符。linux与windows上的分隔符是不一样的。
               		if(is_dir($fileName))  								// 如果$fileName是一个目录,则继续循环下去,直到其不是目录为止
                	{ 
						$res=getDirSize($fileName);
                    	$sizeResult += $res['size'];
						$timeResult = array_merge($timeResult,$res['time']);
                	}
                	else
                	{ 
                	    $sizeResult += filesize($fileName); 			//如果$fileName是一个文件,计算它的大小,累加。
						$key = $fileName." : ".filesize($fileName);
                	    $timeResult[$key] = filectime($fileName); 	
                	}
            	}    
        	}
			$result=array('size'=>$sizeResult,'time'=>$timeResult);
        	closedir($handle);
        	return $result;
    	}
   

	$dir = "/usr/local/lamp/apache2/htdocs/test";
	$r1 = getDirSize($dir);
	$size=$r1['size'];
	echo "del前的目录大小为:".$r1['size'].'byte'.'<br>';//获取目录下文件总大小(单位:byte)
	echo "del前的文件为:<br>";
	asort($r1['time']);
	foreach($r1['time'] as $key=>$value){
		$str = $key." : ".$value;
		$arr = explode(" : ",$str);
		echo "文件名为: ".$arr[0]."---文件大小为: ".$arr[1]."---文件创建时间为:".$arr[2]."<br>";
		//$arr[0]:fileName $arr[1]:fileSize  $arr[2]:filecTime
		if($size>1024){
			if(unlink($arr[0])){
				$size -= $arr[1];
			}
		}
		
	}
	
	$r2 = getDirSize($dir);
	$size=$r2['size'];
	asort($r2['time']);
	echo "del后的目录大小为:".$r2['size'].'byte'.'<br>';//获取目录下文件总大小(单位:byte)
	echo "删除后剩余文件为:"."<br>";
	foreach($r2['time'] as $key=>$value){
		$str = $key." : ".$value;
		$arr = explode(" : ",$str);
		echo "文件名为: ".$arr[0]."---文件大小为: ".$arr[1]."---文件创建时间为:".$arr[2]."<br>";
		
	}
	
	
?>

抱歉!评论已关闭.