1. 程式人生 > >PHP文件系統操作常用函數

PHP文件系統操作常用函數

調用 name del 菜鳥 global lena 格式化 類型 lose

雖然PHP提供很多內置的文件處理函數,但是分得特別細,有一些操作需要多個函數一起使用才能達到目標,比如刪除非空文件夾的所有內容,遍歷文件夾等功能,下面各個函數是學習的時候整理的,有的是教程裏的,有的是自己想的,可以直接調用,免得自己再次寫一遍,,本人是PHP菜鳥,一定存在很多bug,如果你願意,非常歡迎留言,我收到留言後再修改。

 1     /**
 2      * [以文字形式返回文件的類型]
 3      * @param  [type] $filename [description]
 4      * @return [type]           [description]
5 */ 6 function getfiletype($filename){ 7 $type=filetype($filename); 8 switch($type){ 9 case "dir": 10 echo "this is a dir<br>"; 11 break; 12 case "file": 13 echo "this is a file<br>"; 14 break
; 15 case "unknown": 16 echo "can‘t know the file<br>"; 17 break; 18 } 19 }

 1     /**
 2      * [返回格式化後的文件大小]
 3      * @param  [type] $size [description]
 4      * @return [type]       [description]
 5      */
 6     function transfer_filesize($size
){ 7 if($size>=pow(2,40)){ 8 return ceil($size/pow(2,40))."TB"; 9 } else if($size>=pow(2,30)){ 10 return ceil($size/pow(2,30))."GB"; 11 } else if($size>=pow(2,20)){ 12 return ceil($size/pow(2,20))."MB"; 13 } else if($size>=pow(2,10)){ 14 return ceil($size/pow(2,10))."KB"; 15 } else { 16 return $size."B"; 17 } 18 }

 1     /**
 2      * [獲取文件夾或者文件的屬性,包含文件類型及大小]
 3      * @param  [type] $filename [description]
 4      * @return [type]           [description]
 5      */
 6     function getfilepro($filename){
 7         if(file_exists($filename)){
 8             echo "the file is exists<br>";
 9             getfiletype($filename);
10             echo "the file size is ".transfer_filesize(filesize($filename))."<br>";
11         } else {
12             echo "the file is not exists<br>";
13         }
14     }

 1     /**
 2      * [遍歷整個文件夾]
 3      * @param  [string] $file [需要遍歷的文件夾名或文件名]
 4      * @return [type]       [description]
 5      */
 6     function show_all_files($file){
 7         $dir=opendir($file);
 8         while($filename=readdir($dir)){
 9             if($filename!=‘.‘ && $filename!=‘..‘){
10                 $filename=$file."/".$filename;
11                 if(is_dir($filename)){
12                     echo "目錄".$filename."<br>";
13                     show_all_files($filename);
14                 } else{
15                     echo "文件".$filename."<br>";
16                 }
17             }
18         }
19         closedir($dir);
20     }
21     show_all_files("./class");

 1     /**
 2      * [獲取一個磁盤或者分區的總容量和剩余容量]
 3      * @param  [string] $disk [description]
 4      * @return [array]       [可取消註釋,返回一個包含兩個值的數組]
 5      */
 6     function get_disk_space($disk){
 7         $total_space=transfer_filesize(disk_total_space($disk));
 8         $free_space=transfer_filesize(disk_free_space($disk));
 9         echo $disk."盤總容量為:".$total_space."<br>";
10         echo $disk."盤可用容量為:".$free_space."<br>";
11         return array($total_space,$free_space);
12     }
13     get_disk_space("C:");

 1     /**
 2      * [目錄總數,文件總數,及目錄總大小]
 3      * @param  [string] $filename [目錄名]
 4      * @return [array]           [返回該目錄的目錄總數,文件總數,及目錄總大小]
 5      */
 6     function get_all_nums($filename){
 7         $total_size=0;
 8         $total_dir_nums=0;
 9         $total_file_nums=0;
10         function get_nums($filename){
11             global $total_dir_nums,$total_file_nums,$total_size;
12             $dir=opendir($filename);
13             while($file=readdir($dir)){
14                 if($file!="." && $file!=".."){
15                     $file=$filename."/".$file;
16                     if(is_dir($file)){
17                         get_nums($file);
18                         $total_dir_nums++;
19                     } else {
20                         $total_file_nums++;
21                         $total_size+=filesize($file);
22                     }
23                 }
24             }
25             closedir($dir);
26             return array($total_dir_nums,$total_file_nums,$total_size);
27         }
28         list($dir,$file,$size)=get_nums($filename);
29         echo "文件數為:".$file."<br>";
30         echo "目錄數為:".$dir."<br>";
31         echo "總大小為:".transfer_filesize($size)."<br>";
32     }
33     get_all_nums("./class");

 1     /**
 2      * [刪除一個非空的目錄或文件]
 3      * @param  [string] $filename [要刪除的目錄或文件名]
 4      * @return [null]           [null]
 5      */
 6     function delete_dir($filename){
 7         if(!file_exists($filename)){
 8             die("不存在該目錄");
 9         }
10         if(is_file($filename)){
11             unlink($filename);
12             echo "成功刪除文件".$file."<br>";
13         }
14         $dir=opendir($filename);
15         while($file=readdir($dir)){
16             if($file!="." && $file!=".."){
17                 $file=$filename."/".$file;
18                 if(is_dir($file)){
19                     delete_dir($file);
20                 } else {
21                     unlink($file);
22                     echo "成功刪除文件".$file."<br>";
23                 }
24             }
25         }
26         closedir($dir);
27         rmdir($filename);
28         echo "成功刪除目錄".$filename."<br>";
29     }
30     delete_dir("./aaaa");

 1     /**
 2      * [用來拷貝一個目錄] 
 3      * @param  [string] $dir_src  [源目錄]
 4      * @param  [string] $dir_dest [目標目錄]
 5      * @return [null]           [description]
 6      */
 7     function copy_dir($dir_src,$dir_dest){
 8         if(!file_exists($dir_src)){
 9             die("源文件不存在<br>");
10         }
11         if(!file_exists($dir_dest)){
12             mkdir($dir_dest);
13         }
14         $dir=opendir($dir_src);
15         while($file=readdir($dir)){
16             if($file!="." && $file!=".."){
17                 $src_file=$dir_src."/".$file;
18                 $dest_file=$dir_dest."/".$file;
19                 if(is_dir($src_file)){
20                     copy_dir($src_file,$dest_file);
21                 } else {
22                     copy($src_file,$dest_file);
23                 }
24             }
25         }
26         closedir($dir);
27     }
28     copy_dir("../aaaa","./bbbb");

 1     /**
 2      * [逐個字符讀出文件所有內容]
 3      * @param  [string] $filename [要讀的文件名]
 4      * @return [null]           [description]
 5      */
 6     function get_contents_one($filename){
 7         $fp=fopen($filename,"r");
 8         while(!feof($fp)){
 9             echo fgetc($fp);
10         }
11         echo "<br>";
12         fclose($fp);
13     }
14     get_contents_one("bbb.txt");

 1     /**
 2      * [逐行讀出文件所有內容]
 3      * @param  [string] $filename [要讀的文件名]
 4      * @return [null]           [description]
 5      */
 6     function get_contents_two($filename){
 7         $fp=fopen($filename,"r");
 8         while(!feof($fp)){
 9             echo fgets($fp);
10         }
11         echo "<br>";
12         fclose($fp);
13     }
14     get_contents_two("bbb.txt");

PHP文件系統操作常用函數