遍历文件夹下所有文件有两种方法
备注p为打印函数相当于print_r(),var_dump()的友好输出
第一种:
//遍历文件夹下所有文件和目录
//opendir():将目录下的文件已资源的形式保存 //readir():读取资源下的文件或目录$dir = "./file" ; function for_dir( $dir ){ if (! is_dir ( $dir )){ return false ; } $file = opendir ( $dir ); if ( $file ){ while (( $fname = readdir ( $file ))!== false ){ $temp = $dir . '/' . $fname ; if ( is_dir ( $temp )&& $fname != '.' && $fname != '..' ){ p( '目录:' . $temp ); for_dir( $temp ); } else if (! is_dir ( $temp )){ if ( $fname != '.' && $fname != '..' ){ p( '文件:' . $temp ); } } } } } for_dir( $dir );
第二种
//scandir()将当前目录下所有文件与文件夹以数组的形式列出来 $dir=__DIR__; function second_dir($test){ $test=scandir($test); if(!$test){ return false; } foreach($test as $fname){ $temp=__DIR__.'\\'.$fname; if(is_dir($temp)&& $fname!='.'&&$fname!='..'){ p('目录'.$temp); second_dir($temp); }else{ if($fname!='.'&&$fname!='..'){ p('文件'.$temp); } } } } second_dir($dir);
递归删除空目录如果这个会了上面的遍历就是小菜
a是一个目录,目录下可以建立多个文件夹和文件可套无限层,我测试到3层,大神们可以测试提意见谢谢
mkdir()只能删除空目录;
$dir='./a'; function del_dir($dir){ if(!is_dir($dir)){return false;} $test=scandir($dir); if(count($test)==2){//等于2的目的是scandir函数将目录以数组形式打开,如果只等于2就证明目录下只有'.'和'..' rmdir($dir); } foreach($test as $fname){ $temp=$dir.'\\'.$fname; $dirname=dirname($temp); if(is_dir($temp) && $fname!='.'&& $fname!='..'){ if(count(scandir($temp))==2){//数组长度等于2证明是空文件夹 if(rmdir($temp)){ p($temp);p($dirname); del_dir($dirname); } } del_dir($temp); } } } del_dir($dir);