解析目錄路徑
使用PHP指令碼可以方便對目錄進行操作,如建立目錄、遍曆目錄、複值目錄與刪除目錄等操作。
??常用的檔案目錄路徑格式:
??$unixPath="/var/www/html/index.php";
//在UNIX系統中的絕對路徑,必須使用"/"分隔
??$winPath="C:\\Appserv\\www\\index.php";
//在Windows系統的絕對路徑,預設使用"\"分隔
??$winPath2="C:/Appserv/www/index.php";
//在Windows系統中也可使用“/”分隔。
??注意使用絕對路徑與相對路徑。
PHP檔案路徑相關函數
??basename--返迴路徑中的檔案名稱部分
??文法:string basename( string path [, string suffix] )
??給出一個包含有指向一個檔案的全路徑的字串,本函數返回基本的檔案名稱。如果檔案名稱是以suffix結束的,那這一部分也會被去掉。
??dirname--返迴路徑中的目錄部分
??文法:string dirname( string path )
??給出一個包含有指向一個檔案的全路徑的字串,本函數返回去掉檔案名稱後的目錄名。
$path= "/home/httpd/html/index.php";
$file= basename($path);// $file值:"index.php"
$file= basename($path, ".php"); // $file值:"index "
$file= dirname($path); // $file值:"/home/httpd/html"
?>
pathinfo--返迴文件路徑的資訊
??文法:array pathinfo( string path [, intoptions] )
??pathinfo() 返回一個聯合數組包含有path的資訊。包括以下的數組單元:dirname,basename和extension。
$path_parts= pathinfo("/www/htdocs/index.html");
echo $path_parts["dirname"] . "\n"; // /www/htdocs
echo $path_parts["basename"] . "\n"; // index.html
echo $path_parts["extension"] . "\n"; // html
?>
??realpath--返回正常化的絕對路徑名
??文法:string realpath( string path )
??realpath() 擴充所有的符號串連並且處理輸入的path中的'/./', '/../' 以及多餘的'/' 並返回正常化後的絕對路徑名。返回的路徑中沒有符號串連,'/./' 或'/../' 成分。
遍曆目錄
opendir--開啟目錄控制代碼
??文法:resource opendir( string path [, resource context] )
??開啟一個目錄控制代碼,可用於之後的closedir(),readdir()和rewinddir()調用中。
??readdir--從目錄控制代碼中讀取條目
??文法:string readdir( resource dir_handle)
??返回目前的目錄指標位置的檔案名稱,沒有返回false,並將指標向下移動一位。檔案名稱以在檔案系統中的排序返回。
??closedir--關閉目錄控制代碼
??文法:void closedir( resource dir_handle)
??關閉由dir_handle指定的目錄流。流必須之前被opendir()所開啟。
??rewinddir--倒回目錄控制代碼
??文法:void rewinddir( resource dir_handle)
??將dir_handle指定的目錄流重設到目錄的開頭。
統計目錄大小
??disk_free_space--返回目錄中的可用空間
??文法:float disk_free_space( string directory )
??給出一個包含有一個目錄的字串,本函數將根據相應的檔案系統或磁碟分割返回可用的位元組數。
??disk_total_space--返回一個目錄的磁碟總大小
??文法:float disk_total_space( string directory )
??給出一個包含有一個目錄的字串,本函數將根據相應的檔案系統或磁碟分割返回所有的位元組數。
例子
//自訂一個函數dirSize(),統計傳入參數的目錄大小function dirSize($directory) {$dir_size=0;//初值為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"); //調Function Compute目錄大小,返回目錄大小echo round($dir_size/pow(1024,1),2)."KB";//將目錄位元組換為“KB”單位?>
建立與刪除目錄
mkdir--建立目錄
??文法:boolmkdir(string pathname [,intmode])
??嘗試建立一個由pathname指定的目錄。
??rmdir--刪除目錄
??文法:boolrmdir( string dirname)
??嘗試刪除dirname所指定的目錄。該目錄必須是空的,而且要有相應的許可權。如果成功則返回TRUE,失敗則返回FALSE。
??unlink--刪除檔案
??文法:boolunlink ( string filename )
??刪除filename。和Unix C 的unlink() 函數相似。如果成功則返回TRUE,失敗則返回FALSE
//自訂函數遞迴的刪除整個目錄function delDir($directory) {if(file_exists($directory)) { //判斷目錄是否存在,如果存在則執行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"); //調用函數,將程式所在目錄中phpMyAdmin檔案夾刪除?>
複製與移動目錄
copy--拷貝檔案
??文法:boolcopy ( string source, string dest)
??將檔案從source拷貝到dest。如果成功則返回TRUE,失敗則返回FALSE。
??PHP中沒有提供複製與移動目錄的相關函數。如需要,只要自訂函數了。
檔案的基本操作
檔案的開啟與關閉
fopen--開啟檔案或者URL
??文法:resource fopen( string filename, string mode [, booluse_include_path[, resource zcontext]] )
??fopen() 將filename指定的名字資源綁定到一個流上。如果filename是"scheme://..." 的格式,則被當成一個URL,PHP 將搜尋協議處理器(也被稱為封裝協議)來處理此模式。如果該協議尚未註冊封裝協議,PHP 將發出一條訊息來協助檢查指令碼中潛在的問題並將filename當成一個普通的檔案名稱繼續執行下去。
??mode參數指定了所要求到該流的訪問類型。
??如果也需要在include_path中搜尋檔案的話,可以將可選的第三個參數use_include_path設為'1' 或TRUE。
??如果開啟失敗,本函數返回FALSE。
fclose--關閉一個已開啟的檔案指標
寫入檔案
fwrite--寫入檔案(可安全用於二進位檔案)
??文法:intfwrite( resource handle, string string[, intlength] )
??fwrite() 把string的內容寫入檔案指標handle處。如果指定了length,當寫入了length個位元組或者寫完了string以後,寫入就會停止,視乎先碰到哪種情況。返回寫入的字元數,出現錯誤時則返回FALSE
讀取檔案內容
??fread--讀取檔案(可安全用於二進位檔案)
??string fread( inthandle, intlength )
??fread() 從檔案指標handle讀取最多length個位元組。該函數在讀取完length個位元組數,或到達EOF 的時候,或(對於網路流)當一個包可用時就會停止讀取檔案,視乎先碰到哪種情況。
php$handle = fopen("http://www.example.com/", "rb");$contents = "";while (!feof($handle)) {$contents .= fread($handle, 8192);}fclose($handle);?>
fgets--從檔案指標中讀取一行
??文法:string fgets( inthandle [,intlength])
??從handle指向的檔案中讀取一行並返回長度最多為length-1 位元組的字串。碰到分行符號(包括在傳回值中)、EOF 或者已經讀取了length -1 位元組後停止(看先碰到那一種情況)。如果沒有指定length,則預設為1K,或者說1024 位元組。
??fgetc--從檔案指標中讀取字元
??文法:string fgetc( resource handle )
??返回一個包含有一個字元的字串,該字元從handle指向的檔案中得到。碰到EOF 則返回FALSE。
file--把整個檔案讀入一個數組中
??文法:array file ( string filename [, intuse_include_path[, resource context]] )
??和readfile()一樣,只除了file() 將檔案作為一個數組返回。數組中的每個單元都是檔案中相應的一行,包括分行符號在內。如果失敗file() 返回FALSE。
??readfile--輸出一個檔案
??文法:intreadfile( string filename [, booluse_include_path[, resource context]] )
??讀入一個檔案並寫入到輸出緩衝。
??返回從檔案中讀入的位元組數。如果出錯返回FALSE 並且除非是以@readfile() 形式調用,否則會顯示錯誤資訊。
以上就介紹了目錄與檔案的基本操作一 (44),包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。