PHP文件

WEB DESIGN

PHP文件操作

像其他編程語言(c , java)一樣螟蝙,php內(nèi)置了多個(gè)文件函數(shù),用來完成文件的打開、讀寫玄坦、關(guān)閉等操作嫩挤。

1.打開文件

resource fopen(string $filename,string mode,[,bool $use_include_path=false[,resource context]] )

fopen函數(shù)用于打開一個(gè)已存在的文件害幅,如果文件不存在或打開失敗,返回false岂昭,可以在前面加@來屏蔽這個(gè)錯(cuò)誤矫限;如果正確打開,返回文件指針句柄佩抹。

fopen支持多種模式:

模式 模式名稱 意義
r 只讀 打開文件叼风,從文件頭開始讀
r+ 讀寫 打開文件,從文件頭開始讀寫
w 只寫 打開文件棍苹,從文件頭開始寫无宿,若文件存在會(huì)刪除原有內(nèi)容,若文件不存在枢里,會(huì)創(chuàng)建這個(gè)文件
w+ 讀寫 打開文件孽鸡,從文件頭開始讀寫蹂午,若文件存在會(huì)刪除原有內(nèi)容,若文件不存在彬碱,會(huì)創(chuàng)建這個(gè)文件
x 謹(jǐn)慎寫 打開文件豆胸,從文件頭開始寫,若文件存在巷疼,返回false晚胡,若文件不存在,會(huì)創(chuàng)建這個(gè)文件
x+ 謹(jǐn)慎讀寫 打開文件嚼沿,從文件頭開始讀寫估盘,若文件存在,返回false骡尽,若文件不存在遣妥,會(huì)創(chuàng)建這個(gè)文件
a 追加寫 打開文件,如果文件已有內(nèi)容攀细,在文件尾追加寫箫踩,若文件不存在,會(huì)創(chuàng)建這個(gè)文件
a+ 追加讀寫 打開文件谭贪,如果文件已有內(nèi)容班套,在文件尾追加讀寫,若文件不存在故河,會(huì)創(chuàng)建這個(gè)文件
b 二進(jìn)制 二進(jìn)制模式吱韭,用于和其它模式連接。windows區(qū)分二進(jìn)制文件和文本文件鱼的,而Unix不區(qū)分理盆,推薦使用這個(gè)選項(xiàng)達(dá)到兼容性
t 文本 文本模式,用于和其它模式連接凑阶,只是windows系統(tǒng)下的一個(gè)選項(xiàng)
2.寫文件

php中寫文件函數(shù)為fwrite()猿规,同樣可以用fputs()函數(shù),它是fwrite的別名函數(shù)宙橱。

int fwrite($fp, $outputstring,[,int length])

$fp是fopen函數(shù)返回的文件句柄姨俩,$outputstring是要寫入文件的字符串。length是寫入的長(zhǎng)度师郑。寫入成功返回寫入的字節(jié)數(shù)环葵,失敗返回false。

此外宝冕,可以使用file_put_contents函數(shù)來寫文件张遭,它的效果和依次調(diào)用fopen,fwrite,fclose的效果一樣,也就是說不需要調(diào)用fopen函數(shù)就可以寫入數(shù)據(jù)到文件地梨。

int file_put_contens(string filename,string data,[,int flags[,resource context]])

該函數(shù)返回寫入文件的字節(jié)數(shù)菊卷,失敗返回false缔恳。

3.讀文件

讀文件有多種方式,根據(jù)需求可能按行讀取洁闰,可能按字節(jié)讀取歉甚,也可能整個(gè)文件讀取。按行讀取和按字節(jié)讀取需要用feof函數(shù)檢測(cè)文件末尾扑眉。

bool feof(resource $handle)

$handle是fopen函數(shù)返回的句柄纸泄,若文件達(dá)到末尾EOF(end of file)或出錯(cuò)返回true,否則返回false襟雷。

  • 每次讀取一行數(shù)據(jù)

讀取一行數(shù)據(jù)可以用fgets刃滓、fgetss仁烹、fgetcsv函數(shù)耸弄。

string fgets(resource $handle, [,int length])

$handle是fopen函數(shù)返回的句柄,length默認(rèn)長(zhǎng)度為1024字節(jié)卓缰,如果指定了length參數(shù)计呈,那么每行最多讀取并返回length個(gè)字節(jié)。

string fgetss(resource $handle,[,int length[,string $allowable_tags]])

和fgets相似征唬,只是fgetss會(huì)去掉任何HTML和PHP標(biāo)記捌显。$handle是fopen函數(shù)返回的句柄,length指定每行的字節(jié)數(shù)总寒,$allowable_tags指定哪些標(biāo)記不被去掉扶歪。

array fgetcsv(resource $handle,[,int length=0[,string delimiter=','[,string enclosure='"'[,string escape='\\']]]])

和fgets類似,只是除了讀出的每一行并找出 CSV格式的字段然后返回一個(gè)包含這些字段的數(shù)組摄闸。

  • 每次讀取一個(gè)字符

讀取一個(gè)字符使用fgetc函數(shù)實(shí)現(xiàn)善镰。

string fgetc(resource $handle)

$handle是fopen函數(shù)返回的句柄。fgetc會(huì)返回文件結(jié)束符EOF年枕,而fgets不會(huì)炫欺,因此讀取字符時(shí)需要判斷是不是EOF,一般情況下不希望顯示EOF熏兄。

  • 讀取整個(gè)文件

讀取整個(gè)文件可以用readfile品洛、fpassthru、file函數(shù)摩桶。

int readfile(string $filename,[,bool $use_include_path=false[,resource $context]])

調(diào)用readfile會(huì)打開文件桥状,并將文件內(nèi)容輸出到標(biāo)準(zhǔn)輸出(瀏覽器)中,然后關(guān)閉這個(gè)文件硝清。讀取成功返回讀入的文件字節(jié)數(shù)岛宦,失敗返回false。

int fpassthru(resource $handle)

這和readfile類似耍缴,只是需要先調(diào)用fopen函數(shù)打開砾肺,然后將文件句柄傳入這個(gè)函數(shù)挽霉,結(jié)果將文件內(nèi)容輸出到標(biāo)準(zhǔn)輸出,最后關(guān)閉文件变汪。

array file(string $filename,[,int flags=0[,resource $context]])

file函數(shù)除了可以將文件內(nèi)容回顯到標(biāo)準(zhǔn)輸出外侠坎,它將文件的每一行返回到一個(gè)數(shù)組中。

string file_get_contents(string $filename,[,bool $use_include_path=false[,resource $context[,int $offset=-1[,int $maxlen]]]])

和file_put_contents相反裙盾,file_get_contents將整個(gè)文件內(nèi)容讀入到一個(gè)字符串中实胸,并且不會(huì)將文件內(nèi)容輸出到標(biāo)準(zhǔn)輸出中。

  • 讀取任意長(zhǎng)度

可以使用fread函數(shù)從文件中讀取任意長(zhǎng)度的字節(jié)番官。

string fread(resource $handle, int length)

成功返回讀取的字符串庐完,失敗返回false。

4.關(guān)閉文件

當(dāng)用fopen打開一個(gè)文件徘熔,使用完這個(gè)文件之后(讀寫)需要將其關(guān)閉门躯,關(guān)閉一個(gè)文件調(diào)用fclose函數(shù)實(shí)現(xiàn)。

bool fclose(resource $handle)

若文件成功關(guān)閉返回true酷师,反之返回false讶凉。

5.文件鎖定

為了避免多個(gè)用戶同時(shí)讀寫一個(gè)文件,引起資源競(jìng)爭(zhēng)導(dǎo)致不可預(yù)知的結(jié)果山孔,往往需要在打開一個(gè)文件后給它加鎖懂讯。文件鎖定使用flock函數(shù)實(shí)現(xiàn)

bool flock(resource $handle,int $operation [,int &$wouldblock])

文件加鎖操作默認(rèn)是阻塞模式,可以設(shè)置模式為L(zhǎng)OCK_NB來取消阻塞台颠。支持的模式包括如下:

模式 意義
LOCK_SH 讀操作鎖定褐望,文件共享,其他人可以讀該文件
LOCK_EX 寫操作鎖定串前,文件互斥瘫里,該文件不能共享
LOCK_UN 釋放已有的鎖定
LOCK_NB 防止在請(qǐng)求加鎖時(shí)發(fā)生阻塞
6.其他文件相關(guān)函數(shù)
  • file_exists

在不打開文件的前提下,使用file_exists函數(shù)檢查這個(gè)文件是否存在酪呻,它也可以檢查一個(gè)目錄是否存在减宣。

bool file_exists(string $filename)

  • filesize

使用filesize函數(shù)來檢測(cè)一個(gè)文件的大小。

int filesize(string $filename)

  • unlink

使用unlink刪除一個(gè)文件

bool unlink(string $filename,[,resource $context])

  • rewind fseek ftell

這三個(gè)是文件定位函數(shù)玩荠,可以對(duì)文件指針進(jìn)行操作漆腌。rewind函數(shù)在文件指針復(fù)位到文件開始,ftell函數(shù)返回當(dāng)前文件指針?biāo)诘淖止?jié)數(shù)位置阶冈,fseek用于將文件指針指向文件的某個(gè)位置闷尿。

bool rewind(resource $handle, int $offset,[,int $whence=SEEK_SET] )
int fseek()
int ftell(resource $handle)

ENDING

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市女坑,隨后出現(xiàn)的幾起案子填具,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劳景,死亡現(xiàn)場(chǎng)離奇詭異誉简,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)盟广,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門闷串,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人筋量,你說我怎么就攤上這事烹吵。” “怎么了桨武?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵肋拔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我呀酸,道長(zhǎng)凉蜂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任七咧,我火速辦了婚禮跃惫,結(jié)果婚禮上叮叹,老公的妹妹穿的比我還像新娘艾栋。我一直安慰自己,他們只是感情好蛉顽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布蝗砾。 她就那樣靜靜地躺著,像睡著了一般携冤。 火紅的嫁衣襯著肌膚如雪悼粮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天曾棕,我揣著相機(jī)與錄音扣猫,去河邊找鬼。 笑死翘地,一個(gè)胖子當(dāng)著我的面吹牛申尤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播衙耕,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼昧穿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了橙喘?” 一聲冷哼從身側(cè)響起时鸵,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厅瞎,沒想到半個(gè)月后饰潜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體初坠,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年彭雾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了某筐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冠跷,死狀恐怖南誊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜜托,我是刑警寧澤抄囚,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站橄务,受9級(jí)特大地震影響幔托,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜂挪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一重挑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棠涮,春花似錦谬哀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驳糯,卻和暖如春篇梭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酝枢。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國打工恬偷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帘睦。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓袍患,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親官脓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子协怒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 1 文件與目錄 1.1 解析目錄路徑 返回路徑中的文件名部分string basename(string path...
    zshanjun閱讀 463評(píng)論 0 0
  • 1.文件操作 打開關(guān)閉文件 打開文件 $file = "test.txt";$fh = fopen( $file,...
    寒梁沐月閱讀 666評(píng)論 0 0
  • 在講這些函數(shù)前,我先給大家說明一下。因?yàn)槭橇私夂瘮?shù)的常用用法卑笨,因此會(huì)將某些函數(shù)的上下文content參數(shù)省略,以方...
    老苗閱讀 410評(píng)論 0 0
  • 和數(shù)據(jù)庫操作一樣孕暇,操作文件同樣也分為打開文件,讀取文件,寫入文件和關(guān)閉文件四步妖滔。 一隧哮、打開關(guān)閉文件 1、fopen...
    XZ陽光小熊閱讀 2,816評(píng)論 1 0
  • 追求完美不如追求精髓 小時(shí)候玩過一個(gè)游戲座舍,扮演一個(gè)行走江湖的少年沮翔,玩家需要給少年選一個(gè)紅顏知己。游戲給了兩個(gè)選擇曲秉,...
    迦陵雜談閱讀 292評(píng)論 0 1