在對一個檔案進行訪問之前,一般我們都需要判斷檔案是否存在,以免調用了不存在的檔案導致錯誤。
php判斷檔案是否存在函數:file_exists(),結構形式如下:
file_exist($string);
參數$string為一個指向檔案或目錄的字元型變數,如果檔案或目錄存在,則返回true,否則返回false。
執行個體:
| 代碼如下 |
複製代碼 |
<?php /* 判斷post.php是否存在 */ $file="post.php"; if(file_exists($file)){ echo "檔案存在<br>"; } else{ echo "檔案不存在<br>"; } /* 判斷images目錄是否存在 */ $category="images"; if(file_exists($category)){ echo "目錄存在"; } else{ echo "目錄不存在"; } ?> |
php提供了一些訪問檔案屬性的函數,可以擷取檔案的大小、類型、修改時間等
擷取檔案屬性函數
| 函數名 |
作用 |
參數及傳回值 |
| filesize($string) |
擷取檔案大小 |
參數$string為一個指向檔案或目錄的字元型變數。函數的傳回值為整型變數,返迴文件的大小,返回結果會被緩衝。如果出錯,則返回false。函數參數不能為遠程檔案。 |
| filetype($string) |
擷取檔案類型 |
參數$string為一個指向檔案或目錄的字元型變數。函數的傳回值為字元型變數,返回結果會被緩衝。 |
| filemtime($string) |
擷取檔案修改時間 |
參數$string為一個指向檔案或目錄的字元型變數。函數的傳回值為整型變數,返迴文件的修改時間。 |
| fileatime($string) |
擷取檔案訪問時間 |
參數$string為一個指向檔案或目錄的字元型變數。函數的傳回值為整型變數,返迴文件的訪問時間。 |
| fileperms($string) |
擷取檔案許可權 |
參數$string為一個指向檔案或目錄的字元型變數。函數的傳回值為整型變數,返迴文件的相應許可權,返回結果會被緩衝。函數參數不能為遠程檔案。 |
執行個體:
| 代碼如下 |
複製代碼 |
<?php $filename="php.txt"; echo filesize($filename). "<br>"; echo filetype($filename). "<br>"; echo date("Y年 m月 d日",filemtime($filename)). "<br>"; echo date("Y年 m月 d日",fileatime($filename)). "<br>"; echo fileperms($filename). "<br>"; ?> |
在讀取檔案之前,必須先開啟一個檔案,php提供fopen()函數可以開啟本地檔案,也可以開啟遠程檔案。其基本結構形式如下:
resource fopen (string $filename, string $mode)
參數filename是要開啟的檔案名稱。參數mode是要開啟檔案的方式,如下表所示:
fopen()中的mode參數說明
| mode |
說明 |
| r |
唯讀方式開啟,將檔案指標指向檔案頭。 |
| r+ |
讀寫方式開啟,將檔案指標指向檔案頭。 |
| w |
寫入方式開啟,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則嘗試建立之。 |
| w+ |
讀寫方式開啟,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則嘗試建立之。 |
| a |
寫入方式開啟,將檔案指標指向檔案末尾。如果檔案不存在則嘗試建立之。 |
| a+ |
讀寫方式開啟,將檔案指標指向檔案末尾。如果檔案不存在則嘗試建立之。 |
| x |
建立並以寫入方式開啟,將檔案指標指向檔案頭。如果檔案已存在,則 fopen() 調用失敗並返回 FALSE,並產生一條 E_WARNING 層級的錯誤資訊。如果檔案不存在則嘗試建立之。這和給 底層的 open(2) 系統調用指定 O_EXCL|O_CREAT 標記是等價的。此選項被 PHP 4.3.2 以及以後的版本所支援,僅能用於本地檔案。 |
| x+ |
建立並以讀寫方式開啟,將檔案指標指向檔案頭。如果檔案已存在,則 fopen() 調用失敗並返回 FALSE,並產生一條 E_WARNING 層級的錯誤資訊。如果檔案不存在則嘗試建立之。這和給 底層的 open(2) 系統調用指定 O_EXCL|O_CREAT 標記是等價的。此選項被 PHP 4.3.2 以及以後的版本所支援,僅能用於本地檔案。 |
fopen()函數返回一個值,這個值包含一個檔案控制代碼的整數,用來向執行檔案操作的函數標識該檔案。這個值通常被稱為指標,指標就像記憶體位址中的一個個房間的門好。如果php開啟檔案失敗,那麼這個值就是flase。
執行個體:
| 代碼如下 |
複製代碼 |
<?php fopen("php.txt","a"); /* 寫入方式開啟本地檔案 */ fopen("http://www.111cn.net/robots.txt","r"); /* 唯讀方式開啟遠程伺服器檔案 */ ?>
|
首先建立一個”php.txt”的檔案,內容如下:
hello
php
1、fgetc()函數讀取檔案中的某個字元,其結構形式如下:
string fgetc(resource $handle)
參數$handle是已經被開啟的檔案指標,函數返回當前檔案指標所指向的字元。如果檔案指標指向檔案末尾,則返回false。
執行個體:
| 代碼如下 |
複製代碼 |
<?php $filename=fopen('php.txt','r'); $string=fgetc($filename); /* 讀取檔案開頭第一個字元 */ echo $string; ?> |
檔案被開啟後檔案指標通常位於檔案的開始位置。但是當對檔案執行了一定操作後就很難判斷此時php指標的位置了。
php檔案指標位置尋找函數ftell(),其結構形式如下:
int ftell(resource $handle)
參數$handle是要尋找指標的檔案,通過該函數能夠判斷檔案指標的位置,函數返回整數值。
執行個體:
| 代碼如下 |
複製代碼 |
<?php $f=fopen("php.txt","r"); fgets($f,2); echo ftell($f); ?> |
php寫檔案函數fwrite()可以將所需的內容寫入到目標檔案中,結構形式如下:
int fwrite(resource $handle,string $string [,int $length])
參數$handle是要被寫入的檔案,採納數$string是要寫入的內容,參數$length可選,是要寫入的長度。fwrite()函數返回寫入的字元數,出現錯誤時返回false。
執行個體:
| 代碼如下 |
複製代碼 |
<?php $filename="php.txt"; $str1="第一次寫入<br>"; $str2="第二次寫入"; if(is_writable($filename)){ /* is_writable()函數判斷檔案是否可寫 */ $file=fopen($filename,"w"); /* 以寫入方式開啟檔案 */ $w1=fwrite($file,$str1); /* 將內容寫入檔案 */ $w2=fwrite($file,$str2); $file=fopen($filename,"r"); if($w1) echo fgets($file); /* 讀取檔案內容 */ else echo "寫入不成功"; } else echo "檔案不可寫"; ?> |
php指標函數rewind()可以將檔案位置指標設到檔案的開頭,其結構形式如下:
bool rewind (resource $handle );
函數返回一個布爾值,如果成功則返回true,失敗則返回false。
執行個體:
| 代碼如下 |
複製代碼 |
<?php $f=fopen("php.txt","r"); echo fgets($f)."<br>"; /*輸出第一行*/ echo fgets($f)."<br>"; /*輸出第二行*/ rewind($f); /*指標返迴文件頭*/ echo fgets($f); /*輸出第一行*/ ?> |