2
|
filename){ if(!file_exists ($filename)){ echo'檔案'.($filename ).'不存在';
} ($filename)){
filename .'是一個檔案';
} if(is_
echo '是目錄';
is_executable($filename )){ echo$filename
}else{ $filename.'不是執行檔';
if(is_readable($filename)) { ; }else{
echo$filename.
} if ($filename)){
filename.'是可寫入的'; }else{
.'不是可寫入的';
echo'檔案'.$filename.'的大小是'. ).''; .$filename.'的類型是'.filetype( $filename ).'';🎠 echo'檔案'.$filename.'的擁有者是'.fileowner($filename)'';
echo'檔案'.$filename.'的最後存取時間為'.getTime(fileatime(''filename); .'的inode是' .fileinode($filename) .''; '檔案'.$filename.'的修改時間是' .getTime(filemtime($filename)).'';
echo'檔案'.$filename.'的權限是'.fileperms($filename).($filename).($
} etTime($time){ date('Y-m-d H:i:s',$time); }
functiongetFileSize ($size){ ; if ($ size>=pow(2, 40)){
)){ $size=round ($size/ pow(2,40),2); $dw ='PB';
size>=pow(2,30 )){
$尺寸=圓形($尺寸3pow) ;
}否則如果($尺寸 > ;=pow(2,20)){
$尺寸=圓形( $ 尺寸/pow(2,20),2); $ dw ='GB'; 尺寸>= 戰俘(2,10 ) 尺寸/pow(2, 10 $$$ dw='MB';
退貨$尺寸.$dw; } ;
運行結果
1.php是一個檔案 1.php不是可執行檔案 1.php是可讀取的 1.php不是可寫入的 檔案1.php的大小是可讀取的 1.php不是可寫入的 檔案1.php的大小是22MB文件1.php的類型是file 文件1.php的擁有者是1000 文件1.php的最後訪問時間為2015-03-04 12:58:33 文件1.php的inode是536185 文件1 .php的修改時間是2015-03-04 12:58:32檔案1.php的權限是33204
3.檔案路徑相關函數相對路徑:相對於目前目錄的上級和下級目錄的上級和下級. 目前目錄 .. 上一級目錄
路徑分隔符號
linux/Unix “/” windows “” 絕對路徑:可以指的作業系統的根,也可以指的是存放網站的文檔根目錄
如果是在伺服器中執行(透過PHP檔案處理函數執行)路徑則「根」指的就是操作系統的根如果程序是下載的客戶端,再訪問 服務器中的文件時,只有通過Apache訪問,“根”也就指的是文檔根目錄
三個相關函數
basename — 返迴路徑中的檔案名稱部分 dirname — 返迴路徑中的目錄部分pathinfo — 2 3
4
5
67
8
| url2= "../www/login.rar"
; "c:/appserv/www/demo .html"; $url4= echo basename ($url1);
echo echo basename ( $url3); echo
運行結果
index.php login.rar demo.html www.gif
可以看出,basename這個函數回傳的是檔案的名,也就是最後一個專案。 下面我們來看看dirname的用法
|
$url3 ="c:/appserv/www/demo.html" $url4="http://localhost /yyy/www.gif";
echo dirname(
echo dirname($url2);
($url3); echo dirname($url4) ; 運行結果./aaa../www/yyyc :/appserv/wwwhttp://localhost/yyy可以發現,dirname這個函數可以多層嵌套使用,返回的就是它所在的路徑,即除了最後一項之外所有的項。
另外pathinfo的以上所有資訊都可以取得到,另外還包括了檔名和副檔名如下面的結果Array ( ] => login.rar [extension] => rar [filename] => login )4. 檔案的建立刪除修改touch — 建立一個檔案 unlink文件或目錄copy — 拷貝檔案
|
touch ( "./php.apahce"); //建立檔案
; //刪除檔案
rename ( //重命名檔案
copy ( "cache.txt" ,
| 755) ;
權限相關內容
rwx 表這個檔案的擁有者r讀w寫x執行 rwx 表這個檔案的擁有者所在的群組r讀w寫x執行 rwx 其它使用者對這個為檔案的權限r讀w寫x執行
檔案讀寫
1. file_get_contents(string)
傳入檔案名,直接得到檔案中的文字訊息,傳回的內容即為檔案中的文字。
例如
|
=
file_get_contents("1 .txt" );echo ?>則直接開啟了1.txt 檔案中的內容,並傳回文件中的文字訊息。
如果檔案不存在,那麼會提示Warning: file_get_contents(2.txt): failed to open stream: No such file or directory 同樣,檔案還可以是遠端檔案,例如,參數也可以是遠端檔案://www.qq.com |
即可以呈現騰訊網的首頁內容。 缺點:不能讀取指定部分的內容,一次全部讀取。 2. file_put_contents(filename,content) 寫入文件,filename是寫入檔案的檔案名,content是寫入內容,傳回值是成功寫入的字元長度。
1
2
3
file s (
"2.txt",'abcd' ) ;
|
?>
2.txt 文件如果不存在,那麼則會創建這個文件並寫入abcd 這個字符串,返回4 ,為字串的長度。 如果檔案存在,則會將檔案清空,然後寫入字串,傳回寫入長度。 缺點:不能以追加的方式寫入檔案。 3.file(filename)file是直接開啟某一個文件,回傳的結果是一個數組,每一行是數組的一個元素。也就是說,取得行數只需要輸出數組的大小。例如
1 2 | 3
4 5? $str
=
file ( " 1.txt" ) ;
|
echo
count($ str );?>?>
?>
即可得到數組形式的行內容,而且輸出了行數。
缺點:不能讀取指定部分的內容。
4.fopen(filename,mode)
filename是檔案名,可以是路徑加名,也可以是遠端伺服器檔案。
mode是開啟檔案的方式
r,以唯讀模式開啟檔案 r+,除了讀取,還可以寫入。 w, 以只寫的方式打開,如果文件不存在,則創建這個文件,並寫放內容,如果文件存在,並原來有內容,則會清除原文件中所有內容,再寫入(打開已有的重要文件) w+,除了可以寫用fwrite, 還可以讀fread a,以只寫的方式打開,如果文件不存在,則創建這個文件,並寫放內容,如果文件存在,並原來有內容,則不清除原有文件內容,再原有文件內容的最後寫入新內容,(追加) a+,除了可以寫用fwrite, 還可以讀fread b,以二進位模式開啟文件(圖,電影) t,以文字模式開啟檔案
注意:
r+具有讀寫屬性,從文件頭開始寫,保留原文件中沒有被覆蓋的內容;
w+具有讀寫屬性,寫的時候如果文件存在,會被清空,從頭開始寫入。
回傳的是一個檔案資源
5.fwrite(file,content)
檔案寫入功能,file是檔案資源,用fopen函數取得來的,content是寫入內容。同 fputs 函數。
例如
|
fopen (
"1.txt","r+");
$result =fwrite($file,"xx"); $result){
echo"Success"; "Failed";
}?>
則從頭開始寫入資源,即把前兩個字符設為xx部分的長度,file是檔案資源,由fopen傳回的對象,size是讀取字元的長度。 例如
12
34? $file=fopen ( "1.txt","r");
|
( $file , filesize
("1.txt")) ;
|
?>
不過,上述的 filesize 方法只能取得本地檔案大小,對於遠端檔案的讀取就要換一種方法了。
例如
|
=
fopen("http://www.qq.com" ,"r");); $str ="";
whilefile判斷時候到了文件結尾
$str.=fread($file.=fread($file,
} echo$str;?> ?>. file是檔案資源,每次讀取一行。例如我們讀取出騰訊首頁一共有多少行。
123 45
|
$file
=
fopen("http://www.qq.com" ,
| $count
while(!feof ($file)){
);
$count++; $count;
?>
會輸出結果 8893,我們可以查看來源文件,看看它一共有多少行,驗證一下即可。
7.fgetc(file)
與fgets方法很相似,file是檔案資源,每次讀取個字元。例如我們讀取出騰訊首頁一共有幾個字元。
| $file
=
fopen( "http://www.qq.com","r") $str="";$count
while(!feof ($file)){
. ); $count++;
$count;?>
上述程式碼就會輸出所有的字元數量。
8.ftell(file)
ftell 是傳回目前讀取檔案的指標位置,file 是檔案資源,是由 fopen 傳回的物件。
9.fseek(file,offset,whence)
file
檔案系統指針,是典型地由 fopen() 建立的 resource(資源)。
offset
偏移量。
要移動到文件尾之前的位置,需要給 offset 一個負值,並設定 whence 為 SEEK_END。
whence
SEEK_SET – 設定位置等於 offset 位元組。
SEEK_CUR – 設定位置為目前位置加上 offset。
SEEK_END – 設定位置為文件尾加上 offset。
10.rewind($file)
回到檔案頭部,file是檔案資源
例如
| "r") ;
ftell($file) ." ";//輸出讀取前的指針位置 $file,10 )." ";//讀取10個字符,指針移動10個單位
ftell ($file)." ";//輸出讀取後目前指針位置 $file , 20,SEEK_CUR);//目前指針前移20單位 ftell($file) ." ";//輸出移動後指針的位置
,10) ." ";//輸出讀取的10個字元 ($file) ." ";
//輸出讀完10個字後指針 ,- 20,SEEK_END);//指針移動到文件末尾前20個字
ftell($file )." ";//輸出移動後指針的位置
$file,10 )." ";//輸出檔案結尾20個字元 ftell( $file )." ";//輸出讀完10個字後指針 ) ;//回到文件頭部
echoftell($file)." ";//輸出移動後指針 ? >
|
0cuiqingcai 10300uicuiqingcai 10 30.com 0 11.flock(file,operation[ ,wouldblock])
file
檔案資源指針,是典型地由fopen() 建立的resource(資源)。
operation
operation 可以是以下值之一:
LOCK_SH取得共享鎖定(讀取的程式)。
LOCK_EX 取得獨佔鎖定(寫入的程式。
LOCK_UN 釋放鎖定(無論共享或獨佔)。
如果不希望flock() 在鎖定時堵塞,則是LOCK_NB(Windows 上還不支援)。 wouldblock
如果鎖定會堵塞的話(EWOULDBLOCK 錯誤碼情況下),可選的第三個參數會被設定為TRUE。 2
3
4
5 6 7
fopen("1.txt" ,
| EX) )
{
fwrite($file,"xxx"); flock($file,LOCK_UN );
}?}?}
?
以上就介紹了PHP高階特性二之文件處理,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。
|
|
|
|
|
|
|
|