文件系統處理

一、文件系統概述

1、文件類型

UNIX系統中7中文件類型說明


 文件類型                               描述
Block塊設備文件,如某個磁盤分區,軟驅,光驅CD-ROW等
Char字符設備是指在I/O傳輸過程中以字符爲單位進行傳輸的設備,例如鍵盤、打印機等
Dir目錄類型,目錄也是文件的一種
Fifo命名管道,常用於將信息從一個進程傳輸到另一個進程
File普通文本類型,如文本文件或可執行文件等
Link符號鏈接,是指向文件指針的指針,類似windows中的快捷方式
Unknown未知類型

    在PHP中,可以通過filetype()函數獲取文件的上述類型,該函數接受一個文件名作爲參數。

    對於一個已知的文件,可以使用is_file()函數判斷給定的文件名是否爲一個正常的文件;使用is_dir()函數判斷給定的文件名是否是一個目錄;使用is_link()函數判斷給定的文件名是否爲一個符號鏈接。

2、文件屬性

PHP的文件屬性處理函數


   函數名      作用 參數返回值
file_exists()檢查文件或目錄是否存在文件名存在返回TRUE
filesize()取得文件大小文件名返回文件大小的字節數
file_readable()判斷給定文件名是否可讀文件名TRUE 或者FALSE
file_writable()判斷給定文件名是否可寫文件名TRUE 或者FALSE
file_executable()判斷給定文件名是否可執行文件名TRUE 或者FALSE
filectime()取得文件的創建時間文件名返回UNIX時間戳格式
filemtime()取得文件的修改時間文件名返回UNIX時間戳格式
fileatime()取得文件的訪問時間文件名返回UNIX時間戳格式
stat()獲取文件大部分屬性值文件名返回關於給定文件有用信息的數組


<?php

// /**

// 聲明一個函數,通過傳入一個文件名稱獲取文件大部分屬性

// */

function filetyp($filename){

//如果提供的文件或目錄不存在,則直接退出函數

if(!file_exists($filename)){

echo "目標文件不存在!!!"."<br/>";

return;

}


//判斷是否是一個普通文件

if(is_file($filename)){

echo $filename."是一個文件"."<br/>";

}


//判斷是否是一個目錄

if(is_dir($filename)){

echo $filename."是一個目錄"."<br/>";

}


//用定義的函數輸出文件形態

echo "文件形態:".filetype($filename)."<br/>";

//獲取文件大小,並自定義轉換單位

echo "文件大小".filesize($filename)."<br/>";


if(is_readable($filename)){

echo "該文件可讀"."<br/>";

}


if(is_writable($filename)){

echo "該文件可寫"."<br/>";

}


if(is_executable($filename)){

echo "該文件可執行"."<br/>";

}


echo "文件建立時間:".date("Y年m月d日",filectime($filename))."<br/>";

echo "文件修改時間:".date("Y年m月d日",filemtime($filename))."<br/>";

echo "文件訪問時間:".date("Y年m月d日",fileatime($filename))."<br/>";

}


/**

聲明一個函數,用來返回文件的類型

*/

function gfiletype($fileName){

switch(filetype($fileName)){

case "file":      $type."=普通文件";   break;

case "dir":       $type."=目錄文件";    break;

case "block":     $type."=塊設備文件";    break;

case "char":      $type."=字符設備文件";    break;

case "fifo":      $type."=命名管道文件";    break;

case "link":      $type."=符合鏈接";        break;

case "unknown":   $type."=未知類型";      break;

default:          $type."=沒有檢測到類型";      break;

}

return $type;

}


/**

自定義一個文件大小單位轉換函數

*/

function gfilesize($bytes){

if($bytes>=pow(2,40)){

$return=round($bytes/pow(1024,4),2);

$suffix="TB";

}

elseif($bytes>=pow(2,30)){

$return=round($bytes/pow(1024,3),2);

$suffix="GB";

}

elseif($bytes>=pow(2,20)){

$return=round($bytes/pow(1024,2),2);

$suffix="MB";

}

elseif($bytes>=pow(2,10)){

$return=round($bytes/pow(1024,1),2);

$suffix="KB";

}

else{

$return=$bytes;

$suffix="byte";

}

return $return." ".$suffix;

}


//調用自定義函數,將當前目錄下的t2.php文件傳入,獲取屬性

filetyp("t2.php");

?>

代碼運行結果爲:

wKioL1glZ3Pixyz1AAAhF6Xaoyw432.png-wh_50






二、目錄的基本操作

1、解析目錄路徑

   在系統的每個目錄下,都有兩個特殊的目錄“.”和“..”,分別指示當前目錄和當前目錄的父目錄(上一級目錄)。

2、遍歷目錄

   即瀏覽某個目錄下面的文件。

(1)函數operdir()用於打開指定目錄,接受一個目錄的路徑及目錄名作爲參數。

(2)函數readdir()用於讀取指定目錄,接受已經用operdir()函數打開的可操作目錄句柄作爲參數。

(3)函數closedir()用於關閉指定目錄,接受已經用operdir()函數打開的可操作目錄句柄作爲參數。

(4)函數rewinddir()倒回目錄句柄,接受已經用operdir()函數打開的可操作目錄句柄作爲參數。

   

   下面用一個實例來說明以上幾個函數的使用方法。注意,在使用該例子前請確保同一目錄下有phpMyAdmin文件夾。

<?php

$num=0;

$dirname="phpMyAdmin";             //dirname可用其他字母代替

$dir_handle=opendir($dirname);     //dir_handle可用其他字母代替


//將遍歷的目錄和文件名使用表格格式輸出

echo "<table text-align='center' width='600' cellspacing='0' cellpading='0'>";

echo "<caption><h2>目錄".$dirname."下面的內容</h2></caption>";

echo "<tr text-align='left' bgcolor='#ffffff'>";

echo "<th>文件名</th><th>文件大小</th><th>文件類型</th><th>修改時間</th>";

echo "</tr>";


//使用readdir循環讀取目錄裏的內容

while($file=readdir($dir_handle)){      //file可用其他字母代替

//將目錄下的文件和當前目錄鏈接起來,才能在程序中使用

$dirfile=$dirname."/".$file;        //dirfile可用其他字母代替


$bgcolor=$num++%2==0 ? "#ffffff" :"#cccccc";

echo "<tr bgcolor='.$bgcolor.'>";

echo '<td>'.$file.'</td>';

echo '<td>'.filesize($dirfile).'</td>';

echo '<td>'.filetype($dirfile).'</td>';

echo '<td>'.date('Y/m/d',filemtime($dirfile)).'</td>';

echo "</tr>";

}


echo "</table>";


closedir($dir_handle);


echo "在<b>".$dirname."</b>目錄下的子目錄和文件共有".$num. "個";

?>

程序運行結果如下所示:

wKioL1gpV7fQwZ-kAAJxrB0Hy14485.png-wh_50













































3、統計目錄大小

   用filesize()函數計算文件大小,用disk_free_space()和disk_total_space()兩個函數統計磁盤大小。

<?php

/**

自定義一個函數dirsize()統計傳入參數的目錄大小

@param string $directory    目錄名稱

@return double              目錄的尺寸大小

*/

function dirsize($directory){

$dir_size=0;         //用來累加各個文件大小 


if($dir_handle=opendir($directory)){            //打開目錄,並判斷是否能成功打開

while($filename=readdir($dir_handle)){     //循環遍歷目錄下的所有文件

if($filename!="."&&$filename!=".."){   //一定要排除兩個特殊的目錄

$subfile=$directory."/".$filename;   //將目錄下的子文件和                                                                       當前目錄相連

if(is_dir($subfile)){                 //如果爲目錄

$dir_size+=dirsize($subfile);     //遞歸地調用自                                                                   身函數,求子目錄的大小

}

if(is_file($subfile)){                 //如果是文件

$dir_size+=filesize($subfile);     //求出文件的大                                                                              小並累加

}

}


}

closedir($dir_handle);         

return $dir_size;           //返回計算後的目錄大小

}

}


$dir_size=dirsize("phpMyAdmin");

echo round($dir_size/pow(1024,1),2)."KB";      //字節數轉換爲KB單位

?>

4、建立和刪除目錄

   在PHP中,使用mkdir()函數只需要傳入一個目錄名就可以很容易地建立一個新目錄。但刪除目錄所用的函數rmdir()只能刪除一個空目錄並且目錄必須存在。如果是非空的目錄就需要先進入到目錄中,使用unlink()函數將目錄中的每個文件都刪掉,再回來將這個空目錄刪除。如果目錄中還存在子目錄,而且子目錄也非空,就要使用遞歸的方法了。自定義遞歸函數刪除目錄的代碼程序如下所示:

<?php

/**

自定義函數遞歸地刪除整個目錄

@param   string   $directory       目錄名稱 

*/

function deldir($directory){

if(file_exists($directory)){              //如果不存在rmdir()函數會出錯

if($dir_handle=opendir($directory)){  //打開目錄並判斷是否成功

while($filename=readdir($dir_handle)){    //循環遍歷函數

if($filename!="."&&$filename!=".."){  //一定要排除兩個特                                                                         殊的目錄

$subfile=$directory."/".$filename;  //將目錄下的                                                                        文件和當前目錄連接

if(is_dir($subfile)){        //如果是目錄

deldir($subfile);        //遞歸調用自己刪                                                                               除子目錄

}

if(is_file($subfile)){       //如果是文件

unlink($subfile);        //直接刪除這個文                                                                                 件

}

}

closedir($dir_handle);

rmdir($directory);

}

}

}


deldir("phpMyAdmin");

?>

5、複製目錄





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章