程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> PHP 文件&文件夾操作 基礎教程

PHP 文件&文件夾操作 基礎教程

編輯:PHP基礎知識
 

平時coding的時候難免會涉及到一些文件夾、文件的操作,有幸PHP有豐富的函數,這裡稍微做一下整理,算是溫故知新。


關於文件夾的操作


string basename ( string path [, string suffix] )
 

給出一個包含有指向一個文件的全路徑的字符串,本函數返回基本的文件名。如果文件名是以 suffix 結束的,那這一部分也會被去掉。

Windows 中,斜線(/)和反斜線(\)都可以用作目錄分隔符。在其它環境下是斜線(/)。

 

string dirname ( string path )

 

給出一個包含有指向一個文件的全路徑的字符串,本函數返回去掉文件名後的目錄名。

在 Windows 中,斜線(/)和反斜線(\)都可以用作目錄分隔符。在其它環境下是斜線(/)。

 

array pathinfo ( string path [, int options] )

 

pathinfo() 返回一個聯合數組包含有 path 的信息。包括以下的數組單元:dirname,basename 和 extension。

可以通過參數 options 指定要返回哪些單元。它們包括:PATHINFO_DIRNAME,PATHINFO_BASENAME 和 PATHINFO_EXTENSION。默認是返回全部的單元。

 

string realpath ( string path )

 

realpath() 擴展所有的符號連接並且處理輸入的 path 中的 ‘/./’, ‘/../’ 以及多余的 ‘/’ 並返回規范化後的絕對路徑名。返回的路徑中沒有符號連接,’/./’ 或 ‘/../’ 成分。

realpath() 失敗時返回 FALSE,比如說文件不存在的話。在 BSD 系統上,如果僅僅是 path 不存在的話,PHP 並不會像其它系統那樣返回 FALSE。

 


bool is_dir ( string filename )

 

如果文件名存在並且為目錄則返回 TRUE。如果 filename 是一個相對路徑,則按照當前工作目錄檢查其相對路徑。

注: 本函數的結果會被緩存。更多信息參見 clearstatcache()。

 


resource opendir ( string path [, resource context] )

 

打開一個目錄句柄,可用於之後的 closedir(),readdir() 和 rewinddir() 調用中。


string readdir ( resource dir_handle )

 

返回目錄中下一個文件的文件名。文件名以在文件系統中的排序返回。


void closedir ( resource dir_handle )

 

關閉由 dir_handle 指定的目錄流。流必須之前被 opendir() 所打開。


void rewinddir ( resource dir_handle )

 

將 dir_handle 指定的目錄流重置到目錄的開頭。

 


array glob ( string pattern [, int flags] )

 

glob() 函數依照 libc glob() 函數使用的規則尋找所有與 pattern 匹配的文件路徑,類似於一般 shells 所用的規則一樣。不進行縮寫擴展或參數替代。

返回一個包含有匹配文件/目錄的數組。如果出錯返回 FALSE。

有效標記為:

 

GLOB_MARK – 在每個返回的項目中加一個斜線

GLOB_NOSORT – 按照文件在目錄中出現的原始順序返回(不排序)

GLOB_NOCHECK – 如果沒有文件匹配則返回用於搜索的模式

GLOB_NOESCAPE – 反斜線不轉義元字符

GLOB_BRACE – 擴充 {a,b,c} 來匹配 ‘a’,’b’ 或 ‘c’

GLOB_ONLYDIR – 僅返回與模式匹配的目錄項

注: 在 PHP 4.3.3 版本之前 GLOB_ONLYDIR 在 Windows 或者其它不使用 GNU C 庫的系統上不可用。

GLOB_ERR – 停止並讀取錯誤信息(比如說不可讀的目錄),默認的情況下忽略所有錯誤

注: GLOB_ERR 是 PHP 5.1 添加的。

some code:

/**
* 遞歸刪除指定目錄下的所有文件
* 包括指定目錄
*/
function de_file($path) {
if (file_exists($path)) {
if(is_file($path)) {
if(unlink($path)) {
$show .= “$path \r\n”;
}
} else {
$handle = opendir($path);
while (($file = readdir($handle))!=”) {
if (($file!=”.”) && ($file!=”..”) && ($file!=””)) {
if (is_dir(“$path/$file”)){
$show .= del_file(“$path/$file”);
} else{
if( unlink(“$path/$file”) ){
$show .= “$path/$file \r\n”;
}
}
}
}
closedir($handle);
if(rmdir($path)) {
$show .= “$path \r\n”;
}
}
}
return $show;
}


嗯,沒錯,我們應該有隨手關閉資源句柄的習慣。

 

 

文件的相關操作

array file ( string filename [, int use_include_path [, resource context]] )
 

和 readfile() 一樣,只除了 file() 將文件作為一個數組返回。數組中的每個單元都是文件中相應的一行,包括換行符在內。如果失敗 file() 返回 FALSE。

如果也想在 include_path 中搜尋文件的話,可以將可選參數 use_include_path 設為 “1”。

 

 


resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )

fopen() 將 filename 指定的名字資源綁定到一個流上。如果 filename 是 “scheme://…” 的格式,則被當成一個 URL,PHP 將搜索協議處理器(也被稱為封裝協議)來處理此模式。如果該協議尚未注冊封裝協議,PHP 將發出一條消息來幫助檢查腳本中潛在的問題並將 filename 當成一個普通的文件名繼續執行下去。

如果 PHP 認為 filename 指定的是一個本地文件,將嘗試在該文件上打開一個流。該文件必須是 PHP 可以訪問的,因此需要確認文件訪問權限允許該訪問。如果激活了 安全模式 或者 open_basedir 則會應用進一步的限制。

如果 PHP 認為 filename 指定的是一個已注冊的協議,而該協議被注冊為一個網絡 URL,PHP 將檢查並確認 allow_url_fopen 已被激活。如果關閉了,PHP 將發出一個警告,而 fopen 的調用則失敗。

 


string fread ( int handle, int length )

fread() 從文件指針 handle 讀取最多 length 個字節。 該函數在讀取完 length 個字節數,或到達 EOF 的時候,或(對於網絡流)當一個包可用時就會停止讀取文件,視乎先碰到哪種情況。

 


int fwrite ( resource handle, string string [, int length] )

fwrite() 把 string 的內容寫入 文件指針 handle 處。 如果指定了 length,當寫入了 length 個字節或者寫完了 string 以後,寫入就會停止,視乎先碰到哪種情況。

fwrite() 返回寫入的字符數,出現錯誤時則返回 FALSE 。

注意如果給出了 length 參數,則 magic_quotes_runtime 配置選項將被忽略,而 string 中的斜線將不會被抽去。

注: 在區分二進制文件和文本文件的系統上(如 Windows) 打開文件時,fopen() 函數的 mode 參數要加上 ‘b’。

 

string fgets ( int handle [, int length] )

從 handle 指向的文件中讀取一行並返回長度最多為 length – 1 字節的字符串。碰到換行符(包括在返回值中)、EOF 或者已經讀取了 length – 1 字節後停止(看先碰到那一種情況)。如果沒有指定 length,則默認為 1K,或者說 1024 字節。

出錯時返回 FALSE。

通常的缺陷:

習慣了 C 語言中 fgets() 語法的人應該注意到 EOF 是怎樣被返回的。

文件指針必須是有效的,並且必須指向一個由 fopen() 或 fsockopen() 成功打開的文件。


bool feof ( resource handle )

如果文件指針到了 EOF 或者出錯時則返回 TRUE,否則返回一個錯誤(包括 socket 超時),其它情況則返回 FALSE。

 

bool fclose ( resource handle )

將 handle 指向的文件關閉。

如果成功則返回 TRUE,失敗則返回 FALSE。

文件指針必須有效,並且是通過 fopen() 或 fsockopen() 成功打開的。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved