首頁  >  文章  >  後端開發  >  PHP高階特性二之檔處理

PHP高階特性二之檔處理

WBOY
WBOY原創
2016-08-08 09:23:13779瀏覽

PHP中的檔案處理也是相當重要的模組,這篇的主要內容就是PHP中檔案系統的簡介。

檔案系統用途

1. 專案處理都離不開檔案處理

2. 可以用檔案長時間保存資料

3. 建立緩存,在伺服器中進行檔案操作3.建立

緩存,在

伺服器中進行檔案操作

用法詳述

1.基本的判斷函數

is_dir — 判斷給定檔案名稱是否為目錄

is_file —判斷給定檔案名稱是否為一個檔案

is_executable 

is_link — 判斷給定檔案名稱是否為一個符號連接

is_readable — 判斷給定檔案名稱是否可讀

is_uploaded_file — 判斷檔案是否是透過HTTP POST 上上傳的is_uploaded_file — is_wberitable 上傳的是否可寫

is_writeable — is_writable 的別名

2.檔案相關資訊取得

file_exists — 檢查檔案或目錄是否有存取權

file_exists —修改時間

filegroup — 取得檔案的群組

fileinode — 取得檔案的inode

filemtime — 取得檔案修改時間

fileowner — 取得檔案的擁有者

ize 取得檔案大小的

filetype — 取得文件類型

下面我們寫一個例子,傳入文件名,印製它的詳細資料。

1
2

3
4
5
11
12
13
14
15
16
17
18
19
20
21
27
28
29
30
31
32
33
34
35
36
37
380
3937
380
44
45
46
47
48
49
50
51
52
53
54
555
58
59
60
61
62
63

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

67url2

8

/aaa🜎 php"
;
    $
=

"../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的用法

touch (

1
25736
    $
url1 =
"./aaa/bbb/index.php"
;

        $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 — 拷貝檔案

"./php.apahce");

//建立檔案




;

  

//刪除檔案

rename
(

 

//重命名檔案

copy

(
"cache.txt"

,

755

chmod
("a.txt",
)

;

權限相關內容

rwx 表這個檔案的擁有者r讀w寫x執行
rwx 表這個檔案的擁有者所在的群組r讀w寫x執行
rwx 其它使用者對這個為檔案的權限r讀w寫x執行

檔案讀寫

1. file_get_contents(string)

傳入檔案名,直接得到檔案中的文字訊息,傳回的內容即為檔案中的文字。

例如

即可以呈現騰訊網的首頁內容。

1
2
3
4? $str
=

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'34
)

;

?>

2.txt 文件如果不存在,那麼則會創建這個文件並寫入abcd 這個字符串,返回4 ,為字串的長度。 如果檔案存在,則會將檔案清空,然後寫入字串,傳回寫入長度。 缺點:不能以追加的方式寫入檔案。 3.file(filename)file是直接開啟某一個文件,回傳的結果是一個數組,每一行是數組的一個元素。也就是說,取得行數只需要輸出數組的大小。例如

1

2
5?

$str

=

file

(

" 1.txt"

)
;

var_dump
(
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 函數。

例如

1
25 9
php
$file=
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 方法只能取得本地檔案大小,對於遠端檔案的讀取就要換一種方法了。

例如

1
2
3
4
$ file
=

fopen("http://www.qq.com"

,

"r");); $str ="";

whilefile判斷時候到了文件結尾

$str.=fread($file.=fread($file,

} echo$str;?>

?>

. file是檔案資源,每次讀取一行。例如我們讀取出騰訊首頁一共有多少行。

123

4

5

 

$file

=

fopen($count
"http://www.qq.com"

,

"r")
$str
=
""
;

while(!feof ($file)){

);

$count++; $count;

?>

會輸出結果 8893,我們可以查看來源文件,看看它一共有多少行,驗證一下即可。

7.fgetc(file)

與fgets方法很相似,file是檔案資源,每次讀取個字元。例如我們讀取出騰訊首頁一共有幾個字元。

$file

1
2
3
4
5

=

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"0cuiqingcai

6
7
8
9
10
11
12
13
14
php
$file
=
fopen
("1.txt",
)

;

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)."
";//輸出移動後指針
? >

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( EX
"1.txt"

,

"a")
;
)

)

{

fwrite($file,"xxx"); flock($file,LOCK_UN );

}?}?}

? 以上就介紹了PHP高階特性二之文件處理,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn