PHP中並不提供查詢目錄大小、復制目錄、刪除有文件的目錄的函數,我們需要自己編寫
這個函數只要傳遞一個url,就能遞歸查詢目錄中的文件大小,從而統計出目錄大小
1 <?php
2 function dirSize($dir){
3 $dirsize = 0;
4 $url = opendir($dir);
5 while($filename = readdir($url)){
6 $file = $dir.'/'.$filename;
7 if(!($filename=='.' || $filename=='..')){
8 if(is_dir($file)){
9 $dirsize += dirSize($file);
10 }else{
11 $dirsize += filesize($file);
12 }
13 }
14 }
15 closedir($url);
16 return $dirsize;
17 }
這個函數需要傳遞兩個url,分別是舊目錄和新目錄,就能復制該目錄及文件
1 <?php
2 function copyDir($dirSrc,$dirTo){
3 if(is_file($dirTo))
4 {
5 echo '目標不是目錄不能創建!';
6 return;
7 }
8 if(!file_exists($dirTo))
9 {
10 mkdir($dirTo);
11 }
12 $dir_handle = @opendir($dirSrc);
13 if($dir_handle)
14 {
15 while($filename = readdir($dir_handle))
16 {
17 if($filename!="." && $filename!="..")
18 {
19 $subSrcFile = $dirSrc . "\\".$filename;
20 $subToFile = $dirTo . "\\".$filename;
21
22 if(is_dir($subSrcFile))
23 {
24 copyDir($subSrcFile, $subToFile);
25 }
26 if(is_file($subSrcFile))
27 {
28 copy($subSrcFile, $subToFile);
29 }
30 }
31 }
32 closedir($dir_handle);
33 }
34 }
這個函數只要傳遞一個url,就能遞歸刪除目錄及子目錄的文件,從而刪除目錄
1 <?php
2 function rmDirAll($url){
3 //檢測要打開目錄是否存在
4 if(!$dir=@opendir($url)){
5 return false;
6 }
7 while(false !==($file=readdir($dir))){
8 //排除當前目錄與父級目錄
9 if($file!=="."&&$file!==".."){
10 $file=$url .'/'. $file;
11 //遞歸刪除目錄
12 if(is_dir($file)){
13 rmDirAll($file);
14 }else{
15 if(@unlink($file)){
16 continue;
17 }else{
18 return false;
19 }
20 }
21 }
22 if(@rmdir($url)){
23 return true;
24 }else{
25 return false;
26 }
27 }
28 }