在之前的文章中給大家?guī)砹恕蹲屓诵膭拥腜HP的正則表達式基礎(chǔ)(圖例詳解)》,主要講述了PHP正則表達式的基礎(chǔ)知識以及通過示例來進行使用學(xué)習(xí)。本篇文章繼續(xù)來學(xué)習(xí)一下PHP文件系統(tǒng)的相關(guān)知識。希望對大家有所幫助!
在我們使用電腦時,我們都會使用電腦來打開關(guān)閉一個文件,創(chuàng)建一個文件或者上傳一個文件。那么這些操作在代碼里能不能做呢?如果能做的話,應(yīng)該怎樣去做?其實很簡單,學(xué)習(xí)文件處理實際上就是學(xué)習(xí)文件處理的函數(shù),再結(jié)合之前所學(xué)習(xí)的內(nèi)容。那么接下來我們一起來看看吧。
讀取文件算得上是我們再日常使用中最常見的一個操作了,那么再代碼里要怎樣實現(xiàn)。
下面來介紹一下如何使用 PHP 中的函數(shù)來讀取文件內(nèi)容。
fgetc()
:從文件中讀取一個字符
在使用這些函數(shù)讀取文件之前,我們需要先在服務(wù)器根目錄下建立一個文本文件(這里我們以 text.txt 為例),文本內(nèi)容如下:
接下來我們來看一看,fgetc()在使用中應(yīng)該怎樣去用,輸出的結(jié)果又是如何:
<?php header("Content-Type: text/html;charset=utf-8"); $handle = fopen('test.txt', 'r'); $a = fgetc($handle) ; echo $a; ?>
輸出結(jié)果:
fgetc只能讀取一個字符,我們可以利用之前講到的循環(huán)來進行結(jié)合,就可以得到下面示例:
<?php header("Content-Type: text/html;charset=utf-8"); //設(shè)置字符編碼 $handle = fopen('test.txt', 'r'); //打開文件 if (!$handle) { //判斷文件是否打開成功 echo '文件打開失??!'; } while (false !== ($char = fgetc($handle))) { //循環(huán)讀取文件內(nèi)容 echo $char; } fclose($handle); //關(guān)閉文件 ?>
輸出結(jié)果:
fgets()
和 fgetss()
:逐行讀取文件
<?php header("Content-Type: text/html;charset=utf-8"); $handle = fopen('test.txt', 'r'); $a = fgets($handle) ; echo $a; ?>
輸出結(jié)果:
fgetss()函數(shù)是fgets()的一個變式,也是用來讀取一行數(shù)據(jù),讀取的同時它還會過濾掉讀取內(nèi)容中的PHP和HTML標(biāo)記,
可以看出,通過fgets可以逐行讀取文件,同時可以和上文一樣,我們可以利用循環(huán)來讀取全部文件。
示例如下:
<?php $handle = @fopen("test.txt", "r"); if ($handle) { while (($info = fgets($handle, 1024)) !== false) { echo $info.'<br>'; } fclose($handle); } ?>
輸出結(jié)果:
fread()
:讀取文件(任意長度)
<?php $filename = "test.txt"; $handle = fopen($filename, "r"); $contents = fread($handle, '6'); echo '從文件中讀取 6 個字符長度:'.$contents.'<br>'; rewind($handle); $contents = fread($handle, filesize($filename)); echo '讀取全部的文件內(nèi)容:'.$contents; fclose($handle); ?>
輸出結(jié)果:
readfile()
:讀取全部文件
<?php $file = 'test.txt'; $info = readfile($file); ?>
輸出結(jié)果:
file()
:把整個文件讀入一個數(shù)組中
<?php $file = 'test.txt'; $arr = file($file, FILE_IGNORE_NEW_LINES); $arr2 = file($file); echo '<pre>'; var_dump($arr); var_dump($arr2); ?>
輸出結(jié)果:
file_get_contents()
:將文件讀入一個字符串
首先,我們先創(chuàng)建一個test.txt文件
然后輸入:
<?php $a = 'test.txt'; $b = file_get_contents($a); //因為每一行有一個回車即n,我用n來把這個字符串切割成數(shù)組 $c = explode("n", $b); //把切割成的數(shù)組,下標(biāo)賦值給$key,值賦值給$val,每次循環(huán)將$key加1。 while (list($key, $val) = each($c)) { ++$key; $val = trim($val); //用的單引號,單引號不解釋變量進行了拼接而已 print 'Line' . $key .':'. $val.'<br />'; } ?>
通過與我們之前學(xué)的知識結(jié)合起來,輸出結(jié)果:
這就是我們學(xué)習(xí)的知識進行了整合,先是通過file_get_contents先打開文件,然后在通過list each語句和while循環(huán),得到了輸出結(jié)果。
擴展知識:fopen、fread、fclose操作讀取
上述的file_get_contents打開文件的方式簡單又粗暴,那么接下來的幾個
resource fopen ( string $文件名, string 模式) string fread ( resource $操作資源, int 讀取長度) bool fclose ( resource $操作資源 )
通過上面的函數(shù)我們來講解資源類型的通常操作方式:
-
打開資源
-
使用相關(guān)函數(shù)進行操作
-
關(guān)閉資源
fopen函數(shù) fopen函數(shù)的功能是打開文件,參數(shù)主要有兩個:
-
文件打開的路徑
-
打開文件的模式
返回類型是一個資源類型,資源類型需要其他的函數(shù)來操作這個資源。所有的資源有打開就要有關(guān)閉。
fread函數(shù): 函數(shù)的功能的功能是讀取打開的文件資源。讀取指定長度的文件資源,讀取一部份向后移動一部份。至到文件結(jié)尾。
fclose函數(shù) :fclose函數(shù)的功能是關(guān)閉資源。資源有打開就有關(guān)閉。
接下來給大家介紹一下fopen函數(shù)的模式:
-
r
只讀方式打開,將文件指針指向文件頭。 -
r+
讀寫方式打開,將文件指針指向文件頭。 -
w
寫入方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創(chuàng)建 -
w+
讀寫方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創(chuàng)建 -
a
寫入方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創(chuàng)建 -
a+
讀寫方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創(chuàng)建之 -
x
創(chuàng)建并以寫入方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調(diào)用失敗并返回 FALSE,并生成一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創(chuàng)建 -
x+
創(chuàng)建并以讀寫方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調(diào)用失敗并返回 FALSE,并生成一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創(chuàng)建
推薦學(xué)習(xí):《PHP視頻教程》