php目录操作的循环与递归
递归删除目录:
第一种:
<?php
$dir = dirname(__FILE__).'/test'; //要删除的非空目录
delFile($dir); //执行删除函数
function delFile($dir){
$handle = @opendir($dir);
// 如果整个目录为空直接删除
if(is_empty_dir($dir)){
@rmdir($dir);
}else{
while(!!$file = @readdir($handle)){
if($file!='.' && $file!='..'){
// 如果是目录判断是否为空 为空则直接删除
if(filetype($dir.'/'.$file)=='dir'){
if(is_empty_dir($dir.'/'.$file)){
@rmdir($dir.'/'.$file);
// 删除目录后判断父目录是否为空 为空则删除
if(is_empty_dir($dir)){
@rmdir($dir);
}
// 如果目录不为空则递归 删除文件
}else{
delFile($dir.'/'.$file);
}
// 如果是文件 直接删除
}else{
unlink($dir.'/'.$file);
// 删除文件后判断父目录是否为空 为空则删除
if(is_empty_dir($dir)){
@rmdir($dir);
}
}
}
}
}
}
//判断目录是否为空,true为空,false为不空
function is_empty_dir($fp){
$H = @ opendir($fp);
$i = 0;
while($_file = @readdir($H)){
// 如果是空的 则只有'.'和'..'两个目录
$i++; //$i>2 说明有其他目录 则不为空
}
@closedir($H);
if($i > 2){
return false;
}else{
return true;
}
}
?>
第二种:
<?php
$dir = dirname(__FILE__).'/test'; //要删除的非空目录
delDir($dir); //调用delDir函数
function delDir($dir){
if(file_exists($dir)){ //判断目录是否存在
if($dir_handle = @opendir($dir)){
//打开目录返回目录资源,并判断是否成功
while($filename = readdir($dir_handle)){
//遍历目录,读出目录中的文件或目录
if($filename!='.' && $filename!='..'){
//一定要排除两个特殊的目录
$subFile = $dir."/".$filename;
//将目录下的文件与当前目录相连
if(is_dir($subFile)){ //如果是目录
delDir($subFile); //递归调用自己删除子文件
}
if(is_file($subFile)){ //如果是文件条件
unlink($subFile); //直接删除这个文件
}
}
}
closedir($dir_handle); //关闭目录资源
rmdir($dir); //删除空目录
}
}
}
?>
循环读出目录内容,递归读出目录大小
// 读出目录内容
function readDirectory($path){
$hander = opendir($path);
while (!!$item = readdir($hander)) {
if($item!='.'&&$item!='..'&&$item!='images'){
;
if(filetype($path.'/'.$item)=='dir'){
$arr['dir'][] = $item;
}elseif(filetype($path.'/'.$item)=='file'){
$arr['file'][] = $item;
}
}
}
closedir($hander);
return $arr;
}
// 读出目录大小
function dirSize($path){
global $filesize; //全局
$hander = opendir($path);
while (!!$item = readdir($hander)) {
if($item!='.'&&$item!='..'&&$item!='images'){
if(is_dir($path.'/'.$item)){
dirSize($path.'/'.$item);
}elseif(is_file($path.'/'.$item)){
$filesize += filesize($path.'/'.$item);
}
}
}
closedir($hander);
return $filesize;
// $filesize = 0; 循环显示时先清零
}
下载文件
// 下载文件
function downFile($filename){
header('content-disposition:attachment;filename='.basename($filename));
header('content-length:'.filesize($filename));
readfile($filename);
}