PHP文件打開(kāi)關(guān)閉及讀寫(xiě)操作示例解析
前言
PHP支持文件上傳功能,因此學(xué)習(xí)PHP文件的相關(guān)操作是必須的,這篇筆記會(huì)去記錄PHP文件系統(tǒng)的相關(guān)知識(shí)。
文件打開(kāi)與關(guān)閉
文件處理包括讀取、關(guān)閉、重寫(xiě)等,例如,訪(fǎng)問(wèn)一個(gè)文件需要3步:打開(kāi)文件、讀寫(xiě)文件和關(guān)閉文件。其他的操作要么是包含在讀寫(xiě)文件中(如顯示內(nèi)容、寫(xiě)入內(nèi)容等),要么與文件自身的屬性有關(guān)系(如文件遍歷、文件改名等)。
1、打開(kāi)文件
在PHP中使用fopen()函數(shù)打開(kāi)文件,fopen()函數(shù)的語(yǔ)法如下:
resource fopen ( string filename, string mode [, bool use_include_path]);
- filename是要打開(kāi)的包含路徑的文件名,可以是相對(duì)路徑,也可以是絕對(duì)路徑。如果沒(méi)有任何前綴則表示打開(kāi)的是本地文件。
- mode是打開(kāi)文件的方式,可取的值如下表所示。
- use_include_path是可選的,該參數(shù)在配置文件php.ini中指定一個(gè)路徑,如F:\AppServ\ www\mess.php,如果希望服務(wù)器在這個(gè)路徑下打開(kāi)所指定的文件,可以設(shè)置為1或 true。
mode | 模式名稱(chēng) | 說(shuō)明 |
---|---|---|
r | 只讀 | 讀模式—進(jìn)行讀取,文件指針位于文件的開(kāi)頭 |
r+ | 讀寫(xiě) | 讀寫(xiě)模式—進(jìn)行讀寫(xiě),文件指針位于文件的開(kāi)頭。在現(xiàn)有文件內(nèi)容的末尾之前進(jìn)行寫(xiě)入就會(huì)覆蓋原有的內(nèi)容 |
w | 只寫(xiě) | 寫(xiě)模式—進(jìn)行寫(xiě)入文件,文件指針指向頭文件。如果該文件存在,則所有文件內(nèi)容被刪除,否則函數(shù)將創(chuàng)建這個(gè)文件 |
w+ | 讀寫(xiě) | 讀寫(xiě)模式—進(jìn)行讀寫(xiě),文件指針指向頭文件。如果該文件存在,則所有文件的內(nèi)容被刪除;否則函數(shù)將創(chuàng)建這個(gè)文件 |
x | 謹(jǐn)慎寫(xiě) | 寫(xiě)模式打開(kāi)文件,從文件頭開(kāi)始寫(xiě)。如果文件已經(jīng)存在,則該文件將不會(huì)被打開(kāi),函數(shù)返回false,PHP將產(chǎn)生一個(gè)警告 |
x+ | 謹(jǐn)慎寫(xiě) | 讀/寫(xiě)模式打開(kāi)文件,從文件頭開(kāi)始寫(xiě)。如果該文件存在,則該文件將不會(huì)被打開(kāi),函數(shù)返回false,PHP將產(chǎn)生一個(gè)警告 |
a | 追加 | 追加模式打開(kāi)文件,文件指針指向尾文件。如果該文件已有內(nèi)容,則將從內(nèi)容末尾開(kāi)始追加;如果文件不存在,則函數(shù)創(chuàng)建這個(gè)文件 |
a+ | 追加 | 追加模式打開(kāi)文件,文件指針指向頭文件。如果該文件已有內(nèi)容,則從文件末尾開(kāi)始追加或者讀?。蝗绻募淮嬖?,則函數(shù)將創(chuàng)建這個(gè)文件 |
b | 二進(jìn)制 | 二進(jìn)制模式—用于與其他模式進(jìn)行連接。如果文件系統(tǒng)能夠區(qū)分二進(jìn)制文件和文本文件,可能會(huì)使用它。Windows可以區(qū)分;UNIX則不區(qū)分。推薦使用這個(gè)選項(xiàng),便于獲得最大程度的可移植性。它是默認(rèn)模式 |
t | 文本 | 用于其他模式的結(jié)合。這個(gè)模式只是Windows下的一個(gè)選擇 |
2、關(guān)閉文件
對(duì)文件的操作結(jié)束后應(yīng)該關(guān)閉這個(gè)文件,否則可能引起錯(cuò)誤。在PHP中使用fclose()函數(shù)關(guān)閉文件,該函數(shù)的語(yǔ)法如下:
bool fclose ( resource handle ) ;
該函數(shù)將參數(shù)handle指向的文件關(guān)閉,如果成功,返回true,否則返回false。其中的文件指針必須是有效的,并且是通過(guò)fopen()函數(shù)成功打開(kāi)的文件。例如:
<?php $f_open =fopen("../file.txt.","rb"); //打開(kāi)文件 … //對(duì)文件進(jìn)行操作 fclose($f_open) //操作完成后關(guān)閉文件 ?>
讀寫(xiě)文件
1.從文件中讀取數(shù)據(jù)
從文件中讀取數(shù)據(jù),可以讀取一個(gè)字符、一行字串或整個(gè)文件,還可以讀取任意長(zhǎng)度的字串。
讀取整個(gè)文件:readfile()、file()和file_get_contents()。
(1)readfile()函數(shù)
readfile()函數(shù)用于讀入一個(gè)文件并將其寫(xiě)入到輸出緩沖,如果出現(xiàn)錯(cuò)誤則返回false。函數(shù)語(yǔ)法 如下:
int readfile(string filename)
使用readfile()函數(shù),不需要打開(kāi)/關(guān)閉文件,不需要echo/print等輸出語(yǔ)句,直接寫(xiě)出文件路徑即可。
(2)file()函數(shù)
file()函數(shù)也可以讀取整個(gè)文件的內(nèi)容,只是file()函數(shù)將文件內(nèi)容按行存放到數(shù)組中,包括換行符在內(nèi)。如果失敗則返回false。函數(shù)語(yǔ)法如下:
array file(string filename)
(3)file_get_contents()函數(shù)
該函數(shù)將文件內(nèi)容(filename)讀入一個(gè)字符串。如果有offset和maxlen參數(shù),將在參數(shù)offset所指定的位置開(kāi)始讀取長(zhǎng)度為maxlen的內(nèi)容。如果失敗,返回false。函數(shù)語(yǔ)法如下:
string file_get_contents(string filename[,int offset[,int maxlen]])
該函數(shù)適用于二進(jìn)制對(duì)象,是將整個(gè)文件的內(nèi)容讀入到一個(gè)字符串中的首選方式。
示例:
使用readfile()函數(shù)、file()函數(shù)和file_get_contents()函數(shù)分別讀取tm.txt的內(nèi)容。
<!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>讀取整個(gè)文件</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()函數(shù)讀取文件內(nèi)容:</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()函數(shù)讀取文件內(nèi)容:</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()函數(shù)讀取文件內(nèi)容:</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>
效果:
讀取一行數(shù)據(jù):fgets()和fgetss()
(1)fgets()函數(shù)
fgets()函數(shù)用于一次讀取一行數(shù)據(jù)。函數(shù)語(yǔ)法如下:
string fgets( int handle [, int length] )
- handle是被打開(kāi)的文件
- length是要讀取的數(shù)據(jù)長(zhǎng)度。
函數(shù)能夠?qū)崿F(xiàn)從handle指定文件中讀取一行并返回長(zhǎng)度最大值為
length-1個(gè)字節(jié)的字符串。在遇到換行符、EOF或者讀取了length-1個(gè)字節(jié)后停止。如果忽略length參數(shù),那么讀取數(shù)據(jù)直到行結(jié)束。
(2)fgetss()函數(shù)
fgetss()函數(shù)是fgets()函數(shù)的變體,用于讀取一行數(shù)據(jù),同時(shí),
fgetss()函數(shù)會(huì)過(guò)濾掉被讀取內(nèi)容中的html和php標(biāo)記。函數(shù)語(yǔ)法如下:
string fgetss ( resource handle [, int length [, string allowable_tags]] )
該函數(shù)能夠從讀取的文件中過(guò)濾掉任何html和php標(biāo)記??梢允褂?
allowable_tags參數(shù)來(lái)控制哪些標(biāo)記不被過(guò)濾掉。
示例:使用fgets()函數(shù)與fgetss()函數(shù)分別讀取fun.php文件并顯示出來(lái)。
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的區(qū)別</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> <div align="left"></div> <table border="1" cellspacing="0" cellpadding="0"> <tr> <td height="30" align="right" valign="middle" scope="col">使用fgets函數(shù):</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函數(shù):</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>
效果:
讀取一個(gè)字符:fgetc()
在對(duì)某一個(gè)字符進(jìn)行查找、替換時(shí),需要有針對(duì)性地對(duì)某個(gè)字符進(jìn)行讀取,在PHP中可以使用fgetc()函數(shù)實(shí)現(xiàn)此功能。函數(shù)語(yǔ)法如下:
string fgetc ( resource handle )
該函數(shù)返回一個(gè)字符,該字符從handle指向的文件中得到。遇到EOF則返回false。
讀取任意長(zhǎng)度的字串:fread()
fread()可以從文件中讀取指定長(zhǎng)度的數(shù)據(jù),函數(shù)語(yǔ)法如下:
string fread ( int handle, int length )
參數(shù)handle為指向的文件資源,length是要讀取的字節(jié)數(shù)。當(dāng) 函數(shù)讀取length個(gè)字節(jié)或到達(dá)EOF時(shí)停止執(zhí)行。
2.將數(shù)據(jù)寫(xiě)入文件
寫(xiě)入數(shù)據(jù)也是PHP中常用的文件操作,在PHP中使用fwrite()和file_put_contents()函數(shù)向文件中寫(xiě)入數(shù)據(jù)。
fwrite()函數(shù)也稱(chēng)為fputs(),它們的用法相同。fwrite()函數(shù)的語(yǔ)法如下:
int fwrite ( resource handle, string string [, int length] )
該函數(shù)把內(nèi)容string寫(xiě)入文件指針handle處。如果指定了長(zhǎng)度length,則寫(xiě)入length個(gè)字節(jié)后停止。如果文件內(nèi)容長(zhǎng)度小于length,則會(huì)輸出全部文件內(nèi)容。
file_put_contents()函數(shù)是PHP 5新增的函數(shù),其語(yǔ)法為:
int file_put_contents ( string filename, string data [, int flags])
filename為寫(xiě)入數(shù)據(jù)的文件。data為要寫(xiě)入的數(shù)據(jù)。flags可以是FILE_USE_INCLUDE_PATH、FILE_APPEND或LOCK_EX,LOCK_EX為獨(dú)占鎖定。
使用file_put_contents()函數(shù)和依次調(diào)用fopen()、fwrite()、 fclose()函數(shù)的功能一樣。
示例:使用fwrite函數(shù)向文件中寫(xiě)入數(shù)據(jù),再使用 file_put_contents()函數(shù)寫(xiě)入數(shù)據(jù)。
<!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函數(shù)寫(xiě)入數(shù)據(jù)</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> <?php header("Content-Type:text/html;charset=utf-8"); $filepath = "05.txt"; $str = "此情可待成追憶 只是當(dāng)時(shí)已惘然<br>"; echo "用fwrite函數(shù)寫(xiě)入文件:"; $fopen = fopen($filepath,'wb') or die('文件不存在'); fwrite($fopen,$str); fclose($fopen); readfile($filepath); echo "<p>用file_put_contents函數(shù)寫(xiě)入文件:"; file_put_contents($filepath,$str); readfile($filepath); ?> </body> </html>
效果:
除了可以對(duì)文件內(nèi)容進(jìn)行讀寫(xiě),對(duì)文件本身同樣也可以進(jìn)行操作,如復(fù)制、重命名、查看修改日期等。PHP內(nèi)置了大量的文件操作函數(shù)。
- bool copy( string path1, string path2):將文件從path1復(fù)制到path2。如果成功,返回true,失敗則返回false。例如:copy('tm.txt','../tm.txt') - bool unlink( string filename )刪除文件,成功返回true,失敗則返回False。例如:unlink(‘./tm.txt') - int fileatime( string filename )返回文件最后一次被訪(fǎng)問(wèn)的時(shí)間,時(shí)間以UNIX時(shí)間戳的方式返回。例如:fileatime('1.txt') - int filemtime( string filename )返回文件最后一次被修改的時(shí)間,時(shí)間以UNIX時(shí)間戳的方式返回。例如:date('Y-m-dH:i:s',filemtime('1.txt')) - int filesize( string filename )取得文件filename的大(bytes)。例如:filesize('1.txt') - array pathinfo(string name [, int options])返回一個(gè)數(shù)組,包含文件name的路徑信息。有dirname、basename和extension??梢酝ㄟ^(guò)option設(shè)置要返回的信息,有PATHINFO_DIRNAME、PATHINFO_BASENAME和PATHINFO_EXTENSION。 默認(rèn)為返回全部。例如: $arr =pathinfo('/tm/sl/12/5/1.txt'); foreach($arras$method=>$value{ echo$method.“:”.$value.“<br>”; } - string realpath ( string filename )返回文件filename的絕對(duì)路徑。如c:\tmp\…\1.txtrealpath('1.txt') - array stat ( string filename )返回一個(gè)數(shù)組,包括文件的相關(guān)信息,如上面提到的文件大小、最后修改時(shí)間等 $arr = stat('1.txt'); foreach($arr as $method => $value){ echo $method.": ".$value."<br>"; }
到此這篇關(guān)于PHP文件打開(kāi)關(guān)閉及讀寫(xiě)操作示例解析的文章就介紹到這了,更多相關(guān)PHP文件打開(kāi)關(guān)閉及讀寫(xiě)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- PHP5.6讀寫(xiě)excel表格文件操作示例
- php 讀寫(xiě)json文件及修改json的方法
- PHP基于文件鎖解決多進(jìn)程同時(shí)讀寫(xiě)一個(gè)文件問(wèn)題示例
- PHP程序中的文件鎖、互斥鎖、讀寫(xiě)鎖使用技巧解析
- php使用fputcsv()函數(shù)csv文件讀寫(xiě)數(shù)據(jù)的方法
- PHP文件讀寫(xiě)操作相關(guān)函數(shù)總結(jié)
- php中使用PHPExcel讀寫(xiě)excel(xls)文件的方法
- php的SimpleXML方法讀寫(xiě)XML接口文件實(shí)例解析
- php中讀寫(xiě)文件與讀寫(xiě)數(shù)據(jù)庫(kù)的效率比較分享
- 如何在PHP中讀寫(xiě)文件
相關(guān)文章
linux平臺(tái)編譯安裝PHP7并安裝Redis擴(kuò)展與Swoole擴(kuò)展實(shí)例教程
這篇文章主要介紹了linux平臺(tái)編譯安裝PHP7并安裝Redis擴(kuò)展與Swoole擴(kuò)展的方法,結(jié)合實(shí)例形式詳細(xì)分析了Linux平臺(tái)上安裝php7并安裝Redis擴(kuò)展與Swoole擴(kuò)展的具體步驟與操作技巧,需要的朋友可以參考下2016-09-09PHP非對(duì)稱(chēng)與對(duì)稱(chēng)雙向加密解密的方式
RSA非對(duì)稱(chēng)加密解密算法是一種廣泛應(yīng)用于信息安全領(lǐng)域的加密算法,AES、DES、3DES都是對(duì)稱(chēng)加密算法,也就是說(shuō)加密和解密使用的是同一個(gè)密鑰,本文給大家介紹了PHP非對(duì)稱(chēng)與對(duì)稱(chēng)雙向加密解密的方式,需要的朋友可以參考下2023-10-10Thinkphp框架安裝composer擴(kuò)展包流程梳理
這篇文章主要介紹了Thinkphp使用composer安裝擴(kuò)展包教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09php下pdo的mysql事務(wù)處理用法實(shí)例
這篇文章主要介紹了php下pdo的mysql事務(wù)處理用法,以實(shí)例形式分析了基于pdo的事物提交與回滾操作的用法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12Windows下XDebug 手工配置與使用說(shuō)明
XDebug 是一個(gè) php 代碼的調(diào)試工具, 對(duì)程序員調(diào)試程序有很大的幫助, 下面簡(jiǎn)單說(shuō)下 XDebug 在 Windows 下的配置.2010-07-07golang與php實(shí)現(xiàn)計(jì)算兩個(gè)經(jīng)緯度之間距離的方法
這篇文章主要介紹了golang與php實(shí)現(xiàn)計(jì)算兩個(gè)經(jīng)緯度之間距離的方法,結(jié)合實(shí)例形式對(duì)比分析了Go語(yǔ)言與php進(jìn)行經(jīng)緯度計(jì)算的相關(guān)數(shù)學(xué)運(yùn)算技巧,需要的朋友可以參考下2016-07-07php PDO實(shí)現(xiàn)的事務(wù)回滾示例
這篇文章主要介紹了php PDO實(shí)現(xiàn)的事務(wù)回滾功能,結(jié)合具體實(shí)例形式分析了php基于PDO操作實(shí)現(xiàn)事務(wù)回滾功能的相關(guān)SQL語(yǔ)句與操作技巧,需要的朋友可以參考下2017-03-03