以下是個(gè)人總結(jié)的PHP文件操作函數(shù)。當(dāng)然,這只是部分,還有很多,我沒(méi)有列出來(lái)。
一、解析路徑:
1.獲得文件名:
basename();
給出一個(gè)包含有指向一個(gè)文件的全路徑的字符串,本函數(shù)返回基本的文件名。如果文件名是以suffix結(jié)束的,那這一部分也會(huì)被去掉。
eg:
$path="/home/httpd/html/index.php";
$file=basename($path,".php");//$fileissetto"index"
2.得到目錄部分:
dirname();
給出一個(gè)包含有指向一個(gè)文件的全路徑的字符串,本函數(shù)返回去掉文件名后的目
錄名。
eg:
$path="/etc/passwd";
$file=dirname($path);//$fileissetto"/etc"
3.得到路徑關(guān)聯(lián)數(shù)組
pathinfo();
得到一個(gè)指定路徑中的三個(gè)部分:目錄名,基本名,擴(kuò)展名。
eg:
$pathinfo=pathinfo("www/test/index.html");
var_dump($pathinfo);
//$path['dirname']
$path['basename']
$path['extenssion']
二、文件類型
1.filetype();
返回文件的類型。可能的值有fifo,char,dir,block,link,file和unknown。
eg:
echofiletype('/etc/passwd');//file
echofiletype('/etc/');//dir
三、得到給定文件有用信息數(shù)組(很有用)
1.fstat();
通過(guò)已打開(kāi)的文件指針取得文件信息
獲取由文件指針handle所打開(kāi)文件的統(tǒng)計(jì)信息。本函數(shù)和stat()函數(shù)相似,
除了它是作用于已打開(kāi)的文件指針而不是文件名。
eg:
//打開(kāi)文件
$fp=fopen("/etc/passwd","r");
//取得統(tǒng)計(jì)信息
$fstat=fstat($fp);
//關(guān)閉文件
fclose($fp);
//只顯示關(guān)聯(lián)數(shù)組部分
print_r(array_slice($fstat,13));
2.stat()
獲取由filename指定的文件的統(tǒng)計(jì)信息(類比f(wàn)stat())
四、計(jì)算大小
1.filesize()
返回文件大小的字節(jié)數(shù),如果出錯(cuò)返回FALSE并生成一條E_WARNING級(jí)的錯(cuò)
誤。
eg:
//輸出類似:somefile.txt:1024bytes
$filename='somefile.txt';
echo$filename.':'.filesize($filename).'bytes';
2.disk_free_space()
獲得目錄所在磁盤分區(qū)的可用空間(字節(jié)單位)
eg
//$df包含根目錄下可用的字節(jié)數(shù)
$df=disk_free_space("/");
//在Windows下:
disk_free_space("C:");
disk_free_space("D:");
3.disk_total_space()
返回一個(gè)目錄的磁盤總大小
eg:(同上,換掉函數(shù))
另:如需要計(jì)算一個(gè)目錄大小,可以編寫(xiě)一個(gè)遞歸函數(shù)來(lái)實(shí)現(xiàn)
五、訪問(wèn)與修改時(shí)間
1.fileatime():醉后訪問(wèn)時(shí)間
2.filectime():醉后改變時(shí)間(任何數(shù)據(jù)的修改)
3.filemtime():醉后修改時(shí)間(指僅是內(nèi)容修改)
六、文件的I/O操作
1.fopen--打開(kāi)文件或者URL
mode說(shuō)明
'r'只讀方式打開(kāi),將文件指針指向文件頭。
'r+'讀寫(xiě)方式打開(kāi),將文件指針指向文件頭。
'w'寫(xiě)入方式打開(kāi),將文件指針指向文件頭并將文件大小截為零。如果文件不存
在則嘗試創(chuàng)建之。
'w+'讀寫(xiě)方式打開(kāi),將文件指針指向文件頭并將文件大小截為零。如果文件不
存在則嘗試創(chuàng)建之。
'a'寫(xiě)入方式打開(kāi),將文件指針指向文件末尾。如果文件不存在則嘗試創(chuàng)建之。
'a+'讀寫(xiě)方式打開(kāi),將文件指針指向文件末尾。如果文件不存在則嘗試創(chuàng)建之。
'x'創(chuàng)建并以寫(xiě)入方式打開(kāi),將文件指針指向文件頭。如果文件已存在,則
fopen()調(diào)用失敗并返回FALSE,
'x+'創(chuàng)建并以讀寫(xiě)方式打開(kāi),將文件指針指向文件頭。如果文件已存在,則
fopen()調(diào)用失敗并返回FALSE
$handle=fopen("/home/rasmus/file.txt","r");
2.file--把整個(gè)文件讀入一個(gè)數(shù)組中(此函數(shù)是很有用的)
和file_get_contents()一樣,只除了file()將文件作為一個(gè)數(shù)組返回。數(shù)
組中的每個(gè)單元都是文件中相應(yīng)的一行,包括換行符在內(nèi)。如果失敗file()返
回FALSE。
//另一個(gè)例子將web頁(yè)面讀入字符串。參見(jiàn)file_get_contents()。
$html=implode('',file('http://www.example.com/'));
3.fgets--從文件指針中讀取一行
從handle指向的文件中讀取一行并返回長(zhǎng)度最多為length-1字節(jié)的字符
串。碰到換行符(包括在返回值中)、EOF或者已經(jīng)讀取了length-1字節(jié)后
停止(看先碰到那一種情況)。如果沒(méi)有指定length,則默認(rèn)為1K,或者說(shuō)1024
字節(jié)。
4.fgetss--從文件指針中讀取一行并過(guò)濾掉HTML標(biāo)記
和fgets()相同,只除了fgetss嘗試從讀取的文本中去掉任何HTML和PHP
標(biāo)記。
可以用可選的第三個(gè)參數(shù)指定哪些標(biāo)記不被去掉
另:對(duì)的目錄的操作:
1.opendir--打開(kāi)目錄句柄,打開(kāi)一個(gè)目錄句柄,可用于之后的closedir(),
readdir()和rewinddir()調(diào)用中。
2.readdir--從目錄句柄中讀取條目,返回目錄中下一個(gè)文件的文件名。文件
名以在文件系統(tǒng)中的排序返回。
3.scandir--列出指定路徑中的文件和目錄(很有用),返回一個(gè)array,包含
有directory中的文件和目錄。
默認(rèn)的排序順序是按字母升序排列。如果使用了可選參數(shù)sorting_order(設(shè)為
1),則排序順序是按字母降序排列。
eg:
$dir='/tmp';
$files1=scandir($dir);
$files2=scandir($dir,1);
print_r($files1);
print_r($files2);
另外注:
七、對(duì)文件屬性的操作(操作系統(tǒng)環(huán)境不同,可能有所不一樣,這點(diǎn)要注意)
1.文件是否可讀:
boolis_readable(stringfilename)
如果由filename指定的文件或目錄存在并且可讀則返回TRUE。
記住PHP也許只能以運(yùn)行webserver的用戶名(通常為'nobody')來(lái)訪
問(wèn)文件。不計(jì)入安全模式的限制。
2.文件是否可寫(xiě)
boolis_writable(stringfilename)
如果文件存在并且可寫(xiě)則返回TRUE。filename參數(shù)可以是一個(gè)允許進(jìn)行是
否可寫(xiě)檢查的目錄名。
記住PHP也許只能以運(yùn)行webserver的用戶名(通常為'nobody')來(lái)訪問(wèn)
文件。不計(jì)入安全模式的限制
3.檢查文件是否存在
boolfile_exists(stringfilename)
如果由filename指定的文件或目錄存在則返回TRUE,否則返回FALSE