1. 程式人生 > >PHP-目錄的基本操作

PHP-目錄的基本操作

默認 目錄大小 方式 span 指針 無法創建 read href archive

1.基本文件類型

  File 普通文件,如文本文件、可執行文件。

  Dir  目錄文件,比如某個文件夾

  Unknow  未知文件

  在windows中只有上面三種文件類型,如果是linux系統還有下面文件類型

  Block  塊設備,比如某個磁盤分區

  Char  字符設備,比如鍵盤、打印機

  Fifo  管道,用來將數據從一個進程傳遞到另一個進程

  Link  鏈接,相當於windows中的快捷方式

  

 使用filetype獲得文件的類型

1 <?php
2     /*使用filetype()獲取文件類型*/
3 
4     echo filetype(__FILE__
);//file 5 echo filetype(__DIR__);//dir 6 ?>

 判斷文件類型

1 <?php
2     /*使用filetype()獲取文件類型*/
3 
4     echo is_file(__FILE__);//true
5     echo is_dir(__DIR__);//true
6 ?>

2.文件的屬性

  

 1 <?php
 2     /*file_exist()判斷文件是否存在*/
 3     if(file_exists(__FILE__)) echo "文件".__FILE__."存在<br>";
 4
if(file_exists(__DIR__)) echo "目錄".__DIR__."存在<br>"; 5 6 /*filesize()取得文件的大小,以字節為單位*/ 7 /*註:是取得文件的大小不是目錄*/ 8 echo "文件".__FILE__."的大小是".filesize(__FILE__)."字節<br>"; 9 10 /*is_readable()判斷文件是否可讀*/ 11 if(is_readable(__FILE__)) echo "文件".__FILE__."可讀<br>"; 12 13
/*is_writable()判斷文件是否可寫*/ 14 if(is_readable(__FILE__)) echo "文件".__FILE__."可寫<br>"; 15 16 /*is_executable()判斷文件是否可執行*/ 17 if(is_readable(__FILE__)) echo "文件".__FILE__."可執行<br>"; 18 19 date_default_timezone_set(‘PRC‘); 20 21 /*filectime()文件的創建時間*/ 22 echo "文件的創建時間為".date(‘Y/m/d H:i:s‘,filectime(__FILE__))."<br>"; 23 24 /*filemtime()文件的修改時間*/ 25 echo "文件的修改時間為".date(‘Y/m/d H:i:s‘,filemtime(__FILE__))."<br>"; 26 27 /*fileatime()文件的最後訪問時間*/ 28 echo "文件的最後訪問時間".date(‘Y/m/d H:i:s‘,filectime(__FILE__))."<br>"; 29 30 /*stat()獲取文件大部分屬性*/ 31 print_r(stat(__FILE__)); 32 ?>

  註:windows系統下默認是不會更新訪問時間的,具體可以參考這裏。

3.目錄的基本操作

  路徑分隔符

    Linux系統中以‘/‘做為路徑分隔符,像這樣E:/xampp/htdocs/test.php

    Windows系統中以‘\‘作為路徑分隔符E:\xampp\htdocs\test.php,但是Windows系統也是支持‘/‘作為分隔符的。

    所以為了保證程序的可移植性,最好用Linux的寫法。

  解析路徑 

 1 <?php
 2     /*basename()返回路徑中的文件名*/
 3     echo "路徑".__FILE__."的文件名是".basename(__FILE__)."<br>";
 4 
 5     /*dirname()返回一個路徑中的目錄部分*/
 6     echo "路徑".__FILE__."的目錄名是".dirname(__FILE__)."<br>";
 7 
 8     /*pathinfo()將一個路徑中的信息以數組形式返回*/
 9     print_r(pathinfo(__FILE__));
10 ?>

  遍歷目錄

 1 <?php
 2     /*opendir()打開一個目錄,接受一個路徑,返回該目錄的資源句柄*/
 3     var_dump($dir=opendir(__DIR__));//resource(3) of type (stream)
 4     echo "<br>";
 5 
 6     /*readdir()接受一個資源句柄返回該目錄當前指針位置的文件名,並將指針向下移動*/
 7     /*前兩個文件名是 . 和 ..表示當前目錄和上一級目錄*/
 8     
 9     echo readdir($dir)."<br>";//.
10     echo readdir($dir)."<br>";//..
11 
12     /*rewinddir()將目錄指針重置到開頭出*/
13     rewinddir($dir);
14     echo readdir($dir)."<br>";//.
15 
16     /*closedir()釋放資源*/
17     closedir($dir);
18 ?>

  

 1 <?php
 2     /*遍歷出目錄的結構*/
 3 
 4     function dirlist($dir){
 5         $sdir=opendir($dir);
 6         while ($fname=readdir($sdir)) 
 7         {
 8             echo $fname."<br>";
 9         }
10         closedir($sdir);
11     }
12 
13     dirlist(__DIR__);
14 ?>

  計算目錄大小

 1 <?php
 2     /*我們可以用filesize()查看文件的大小*/
 3     /*PHP沒有提供統計目錄大小的函數,但我們可以通過前面學習的寫一個*/
 4 
 5     function dirsize($dir){
 6         $size=0;
 7         if (!$dir_s=opendir($dir)) 
 8         {
 9             return false;
10         }
11         while($file=readdir($dir_s))
12         {
13             if ($file==‘.‘||$file==‘..‘) 
14             {
15                 continue;
16             }
17             if(is_dir($dir.‘/‘.$file))
18             {
19                 $size+=dirsize($dir.‘/‘.$file);
20             }
21             else
22             {
23                 $size+=filesize($dir.‘/‘.$file);
24             }
25 
26             
27         }
28         return $size;
29     }
30 
31     echo dirsize(__DIR__);
32 ?>

  註:php5表示的最大整數為PHP_INT_MAX,這個數如果等於字節數,那麽表示的文件大小基本上等於2GB,所以如果想計算2GB以上的文件,請換PHP7

  復制和刪除目錄

  

 1 <?php
 2     /*copy()函數用來賦值問價*/
 3     /*將當前目錄下的test.php復制到testcookie目錄下*/
 4     copy(‘test.php‘,‘./testcookie/test.php‘);//新的路徑名必須存在否則會報錯
 5 
 6     /*unlink()刪除一個文件*/
 7     unlink(‘./testcookie/test.php‘);
 8 
 9     /*創建目錄mkdir()*/
10     mkdir(‘testdir‘);
11 
12     /*PHP沒有復制目錄的函數不過我們可以用mkdir()和copy()寫一個*/
13     function copydir($sdir,$ddir)
14     {
15         if(is_dir($sdir))
16         {
17             if(file_exists($ddir))
18             {
19                 echo "目的路徑已經存在";
20                 return false;
21             }
22             else
23             {
24                 mkdir($ddir);
25                 $dir_handle=opendir($sdir);
26                 while($filename=readdir($dir_handle))
27                 {    
28                     if($filename=="."||$filename=="..") continue;
29                     if(is_dir($sdir."/".$filename))
30                     {
31                         copydir($sdir."/".$filename,$ddir."/".$filename);
32                     }
33                     else
34                     {
35                         copy($sdir."/".$filename,$ddir."/".$filename);
36                     }
37                 }
38 
39                 closedir($dir_handle);
40             }
41         }
42         else
43         {
44             echo "不是目錄無法創建";
45             return false;
46         }
47     }
48 
49     
50     /*rmdir()刪除目錄,該目錄必須為空否則刪除失敗*/
51     //rmdir(‘testdir‘);
52 
53     /*用rmdir()和unlink()可以寫一個級連刪除目錄的函數*/
54     function deldir($dir)
55     {
56         if(is_dir($dir))
57         {
58             $dir_handle=opendir($dir);
59             while($filename=readdir($dir_handle))
60             {
61                 if($filename=="."||$filename=="..") continue;
62                 if(is_dir($dir."/".$filename))
63                 {
64                     deldir($dir."/".$filename);
65                 }
66                 else
67                 {
68                     unlink($dir."/".$filename);
69                 }
70 
71             }
72             closedir($dir_handle);
73             rmdir($dir);
74         }
75         else
76         {
77             echo "不是目錄";
78             return false;
79         }
80     }
81     deldir(‘./testcooki‘);
82 ?>

PHP-目錄的基本操作