PHP檔案開啟關閉及讀寫操作示例解析
前言
PHP支援檔案上傳功能,因此學習PHP檔案的相關操作是必須的,這篇筆記會去記錄PHP檔案系統的相關知識。
檔案開啟與關閉
檔案處理包括讀取、關閉、重寫等,例如,訪問一個檔案需要3步:開啟檔案、讀寫檔案和關閉檔案。其他的操作要麼是包含在讀寫檔案中(如顯示內容、寫入內容等),要麼與檔案自身的屬性有關係(如檔案遍歷、檔案改名等)。
1、開啟檔案
在PHP中使用fopen()函式開啟檔案,fopen()函式的語法如下:
resource fopen ( string filename,string mode [,bool use_include_path]);
- filename是要開啟的包含路徑的檔名,可以是相對路徑,也可以是絕對路徑。如果沒有任何字首則表示開啟的是本地檔案。
- mode是開啟檔案的方式,可取的值如下表所示。
- use_include_path是可選的,該引數在配置檔案php.ini中指定一個路徑,如F:\AppServ\ www\mess.php,如果希望伺服器在這個路徑下開啟所指定的檔案,可以設定為1或 true。
mode | 模式名稱 | 說明 |
---|---|---|
r | 只讀 | 讀模式—進行讀取,檔案指標位於檔案的開頭 |
r+ | 讀寫 | 讀寫模式—進行讀寫,檔案指標位於檔案的開頭。在現有檔案內容的末尾之前進行寫入就會覆蓋原有的內容 |
w | 只寫 | 寫模式—進行寫入檔案,檔案指標指向標頭檔案。如果該檔案存在,則所有檔案內容被刪除,否則函式將建立這個檔案 |
w+ | 讀寫 | 讀寫模式—進行讀寫,檔案指標指向標頭檔案。如果該檔案存在,則所有檔案的內容被刪除;否則函式將建立這個檔案 |
x | 謹慎寫 | 寫模式開啟檔案,從檔案頭開始寫。如果檔案已經存在,則該檔案將不會被開啟,函式返回false,PHP將產生一個警告 |
x+ | 謹慎寫 | 讀/寫模式開啟檔案,從檔案頭開始寫。如果該檔案存在,則該檔案將不會被開啟,函式返回false,PHP將產生一個警告 |
a | 追加 | 追加模式開啟檔案,檔案指標指向尾檔案。如果該檔案已有內容,則將從內容末尾開始追加;如果檔案不存在,則函式建立這個檔案 |
a+ | 追加 | 追加模式開啟檔案,檔案指標指向標頭檔案。如果該檔案已有內容,則從檔案末尾開始追加或者讀取;如果檔案不存在,則函式將建立這個檔案 |
b | 二進位制 | 二進位制模式—用於與其他模式進行連線。如果檔案系統能夠區分二進位制檔案和文字檔案,可能會使用它。Windows可以區分;UNIX則不區分。推薦使用這個選項,便於獲得最大程度的可移植性。它是預設模式 |
t | 文字 | 用於其他模式的結合。這個模式只是Windows下的一個選擇 |
2、關閉檔案
對檔案的操作結束後應該關閉這個檔案,否則可能引起錯誤。在PHP中使用fclose()函式關閉檔案,該函式的語法如下:
bool fclose ( resource handle ) ;
該函式將引數handle指向的檔案關閉,如果成功,返回true,否則返回false。其中的檔案指標必須是有效的,並且是通過fopen()函式成功開啟的檔案。例如:
<?php $f_open =fopen("../file.txt.","rb"); //開啟檔案 … //對檔案進行操作 fclose($f_open) //操作完成後關閉檔案 ?>
讀寫檔案
1.從檔案中讀取資料
從檔案中讀取資料,可以讀取一個字元、一行字串或整個檔案,還可以讀取任意長度的字串。
讀取整個檔案:readfile()、file()和file_get_contents()。
(1)readfile()函式
readfile()函式用於讀入一個檔案並將其寫入到輸出緩衝,如果出現錯誤則返回false。函式語法 如下:
int readfile(string filename)
使用readfile()函式,不需要開啟/關閉檔案,不需要echo/print等輸出語句,直接寫出檔案路徑即可。
(2)file()函式
file()函式也可以讀取整個檔案的內容,只是file()函式將檔案內容按行存放到陣列中,包括換行符在內。如果失敗則返回false。函式語法如下:
array file(string filename)
(3)file_get_contents()函式
該函式將檔案內容(filename)讀入一個字串。如果有offset和maxlen引數,將在引數offset所指定的位置開始讀取長度為maxlen的內容。如果失敗,返回false。函式語法如下:
string file_get_contents(string filename[,int offset[,int maxlen]])
該函式適用於二進位制物件,是將整個檔案的內容讀入到一個字串中的首選方式。
示例:
使用readfile()函式、file()函式和file_get_contents()函式分別讀取tm.txt的內容。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>讀取整個檔案</title> <style type="text/css"> <!-- body,td,th { font-size: 12px; } body { margin-left: 10px; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; } --> </style></head> <body> <table border="1" cellspacing="0" cellpadding="0"> <tr> <td width="280" height="25" align="right" valign="middle" scope="col">使用readfile()函式讀取檔案內容:</td> <td height="25" align="center" valign="middle" scope="col"> <?php readfile('tm.txt'); ?> </td> </tr> <tr> <td height="25" align="right" valign="middle">使用file()函式讀取檔案內容:</td> <td height="25" align="center" valign="middle"> <?php $f_arr = file('tm.txt'); foreach($f_arr as $cont){ echo $cont."<br>"; } ?></td> </tr> <tr> <td width="280" height="25" align="right" valign="middle" scope="col">使用file_get_contents()函式讀取檔案內容:</td> <td height="25" align="center" valign="middle" scope="col"> <?php $f_chr = file_get_contents('tm.txt'); echo $f_chr; ?></td> </tr> </table> </body> </html>
效果:
讀取一行資料:fgets()和fgetss()
(1)fgets()函式
fgets()函式用於一次讀取一行資料。函式語法如下:
string fgets( int handle [,int length] )
- handle是被開啟的檔案
- length是要讀取的資料長度。
函式能夠實現從handle指定檔案中讀取一行並返回長度最大值為
length-1個位元組的字串。在遇到換行符、EOF或者讀取了length-1個位元組後停止。如果忽略length引數,那麼讀取資料直到行結束。
(2)fgetss()函式
fgetss()函式是fgets()函式的變體,用於讀取一行資料,同時,
fgetss()函式會過濾掉被讀取內容中的html和php標記。函式語法如下:
string fgetss ( resource handle [,int length [,string allowable_tags]] )
該函式能夠從讀取的檔案中過濾掉任何html和php標記。可以使用
allowable_tags引數來控制哪些標記不被過濾掉。
示例:使用fgets()函式與fgetss()函式分別讀取fun.php檔案並顯示出來。
fun.php:
<table width="200" border="0" cellspacing="0" cellpadding="0"> <tr> <td height="20" align="center" valign="middle" scope="col"><font color='red'>I am red.</font></td> <td height="20" align="center" valign="middle" scope="col"><font color='green'>I am green.</font></td> </tr> <tr> <td height="20" align="center" valign="middle"><font color='black'>I am black.</font></td> <td height="20" align="center" valign="middle"><font color='pink'>I am pink. </font></td> </tr> </table>
index.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>fgets和fgetss的區別</title> <style type="text/css"> <!-- body,th { font-size: 12px; } body { margin-left: 10px; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; } --> </style></head> <body> <div align="left"></div> <table border="1" cellspacing="0" cellpadding="0"> <tr> <td height="30" align="right" valign="middle" scope="col">使用fgets函式:</td> <td height="30" align="center" valign="middle" scope="col"> <?php header("Content-Type:text/html;charset=utf-8"); $fopen = fopen('fun.php','rb'); while(!feof($fopen)){ echo fgets($fopen); } fclose($fopen); ?> </td> </tr> <tr> <td height="30" align="right" valign="middle">使用fgetss函式:</td> <td height="30" align="center" valign="middle"> <?php $fopen = fopen('fun.php','rb'); while(!feof($fopen)){ echo fgetss($fopen); } fclose($fopen); ?> </td> </tr> </table> </body> </html>
效果:
讀取一個字元:fgetc()
在對某一個字元進行查詢、替換時,需要有針對性地對某個字元進行讀取,在PHP中可以使用fgetc()函式實現此功能。函式語法如下:
string fgetc ( resource handle )
該函式返回一個字元,該字元從handle指向的檔案中得到。遇到EOF則返回false。
讀取任意長度的字串:fread()
fread()可以從檔案中讀取指定長度的資料,函式語法如下:
string fread ( int handle,int length )
引數handle為指向的檔案資源,length是要讀取的位元組數。當 函式讀取length個位元組或到達EOF時停止執行。
2.將資料寫入檔案
寫入資料也是PHP中常用的檔案操作,在PHP中使用fwrite()和file_put_contents()函式向檔案中寫入資料。
fwrite()函式也稱為fputs(),它們的用法相同。fwrite()函式的語法如下:
int fwrite ( resource handle,string string [,int length] )
該函式把內容string寫入檔案指標handle處。如果指定了長度length,則寫入length個位元組後停止。如果檔案內容長度小於length,則會輸出全部檔案內容。
file_put_contents()函式是PHP 5新增的函式,其語法為:
int file_put_contents ( string filename,string data [,int flags])
filename為寫入資料的檔案。data為要寫入的資料。flags可以是FILE_USE_INCLUDE_PATH、FILE_APPEND或LOCK_EX,LOCK_EX為獨佔鎖定。
使用file_put_contents()函式和依次呼叫fopen()、fwrite()、 fclose()函式的功能一樣。
示例:使用fwrite函式向檔案中寫入資料,再使用 file_put_contents()函式寫入資料。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>使用fwrite和file_put_contents函式寫入資料</title> <style type="text/css"> <!-- body,th { font-size: 12px; } body { margin-left: 10px; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; } --> </style></head> <body> <?php header("Content-Type:text/html;charset=utf-8"); $filepath = "05.txt"; $str = "此情可待成追憶 只是當時已惘然<br>"; echo "用fwrite函式寫入檔案:"; $fopen = fopen($filepath,'wb') or die('檔案不存在'); fwrite($fopen,$str); fclose($fopen); readfile($filepath); echo "<p>用file_put_contents函式寫入檔案:"; file_put_contents($filepath,$str); readfile($filepath); ?> </body> </html>
效果:
除了可以對檔案內容進行讀寫,對檔案本身同樣也可以進行操作,如複製、重新命名、檢視修改日期等。PHP內建了大量的檔案操作函式。
- bool copy( string path1,string path2):將檔案從path1複製到path2。如果成功,返回true,失敗則返回false。例如:copy('tm.txt','../tm.txt') - bool unlink( string filename )刪除檔案,成功返回true,失敗則返回False。例如:unlink(‘./tm.txt') - int fileatime( string filename )返回檔案最後一次被訪問的時間,時間以UNIX時間戳的方式返回。例如:fileatime('1.txt') - int filemtime( string filename )返回檔案最後一次被修改的時間,時間以UNIX時間戳的方式返回。例如:date('Y-m-dH:i:s',filemtime('1.txt')) - int filesize( string filename )取得檔案filename的大(bytes)。例如:filesize('1.txt') - array pathinfo(string name [,int options])返回一個數組,包含檔案name的路徑資訊。有dirname、basename和extension。可以通過option設定要返回的資訊,有PATHINFO_DIRNAME、PATHINFO_BASENAME和PATHINFO_EXTENSION。 預設為返回全部。例如: $arr =pathinfo('/tm/sl/12/5/1.txt'); foreach($arras$method=>$value{ echo$method.“:”.$value.“<br>”; } - string realpath ( string filename )返回檔案filename的絕對路徑。如c:\tmp\…\1.txtrealpath('1.txt') - array stat ( string filename )返回一個數組,包括檔案的相關資訊,如上面提到的檔案大小、最後修改時間等 $arr = stat('1.txt'); foreach($arr as $method => $value){ echo $method.": ".$value."<br>"; }
到此這篇關於PHP檔案開啟關閉及讀寫操作示例解析的文章就介紹到這了,更多相關PHP檔案開啟關閉及讀寫內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!