在先前的文章中為大家帶來了《讓人心動的PHP的正則表達式基礎(圖例詳解)》,主要講述了PHP正則表達式的基礎知識以及通過示例來進行使用學習。本篇文章繼續來學習PHP檔案系統的相關知識。希望對大家有幫助!
在我們使用電腦時,我們都會使用電腦來開啟關閉一個文件,建立一個文件或上傳一個文件。那麼這些操作在程式碼裡能不能做呢?如果能做的話,應該怎麼做?其實很簡單,學習文件處理其實就是學習文件處理的函數,再結合之前所學習的內容。那接下來我們就一起來看看吧。
讀取檔案算是我們再日常使用中最常見的一個操作了,那麼再程式碼裡要怎麼實作。
下面來介紹如何使用 PHP 中的函數來讀取檔案內容。
fgetc()
:從檔案中讀取一個字元
在使用這些函數讀取檔案之前,我們需要先在伺服器根目錄下建立一個文字檔案(這裡我們以text.txt 為例),文字內容如下:
接下來我們來看, fgetc()在使用中應該怎樣去用,輸出的結果又是如何:
<?php header("Content-Type: text/html;charset=utf-8"); $handle = fopen('test.txt', 'r'); $a = fgetc($handle) ; echo $a; ?>
輸出結果:
fgetc只能讀取一個字符,我們可以利用先前講到的循環來進行結合,就可以得到下面範例:
<?php header("Content-Type: text/html;charset=utf-8"); //设置字符编码 $handle = fopen('test.txt', 'r'); //打开文件 if (!$handle) { //判断文件是否打开成功 echo '文件打开失败!'; } while (false !== ($char = fgetc($handle))) { //循环读取文件内容 echo $char; } fclose($handle); //关闭文件 ?>
#輸出結果:
fgets()
和fgetss()
:逐行讀取檔案
<?php header("Content-Type: text/html;charset=utf-8"); $handle = fopen('test.txt', 'r'); $a = fgets($handle) ; echo $a; ?>
輸出結果:
fgetss()函數是fgets()的變式,也是用來讀取一行數據,讀取的同時它也會過濾掉讀取內容中的PHP和HTML標記,
可以看出,透過fgets可以逐行讀取文件,同時可以和上文一樣,我們可以利用迴圈來讀取全部文件。
範例如下:
<?php $handle = @fopen("test.txt", "r"); if ($handle) { while (($info = fgets($handle, 1024)) !== false) { echo $info.'<br>'; } fclose($handle); } ?>
輸出結果:
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 '读取全部的文件内容:'.$contents; fclose($handle); ?>
輸出結果:
readfile()
:讀取全部檔案
<?php $file = 'test.txt'; $info = readfile($file); ?>
輸出結果:
file()
:將整個檔案讀入一個陣列中
<?php $file = 'test.txt'; $arr = file($file, FILE_IGNORE_NEW_LINES); $arr2 = file($file); echo '<pre class="brush:php;toolbar:false">'; var_dump($arr); var_dump($arr2); ?>
輸出結果:
file_get_contents()
:將檔案讀入一個字串
首先,我們先建立一個test.txt檔案
然後輸入:
<?php $a = 'test.txt'; $b = file_get_contents($a); //因为每一行有一个回车即\n,我用\n来把这个字符串切割成数组 $c = explode("\n", $b); //把切割成的数组,下标赋值给$key,值赋值给$val,每次循环将$key加1。 while (list($key, $val) = each($c)) { ++$key; $val = trim($val); //用的单引号,单引号不解释变量进行了拼接而已 print 'Line' . $key .':'. $val.'<br />'; } ?>
透過與我們之前學到的知識結合起來,輸出結果:
這就是我們學習的知識進行了整合,先是透過file_get_contents先開啟文件,然後在透過list each語句和while循環,得到了輸出結果。
擴充知識:fopen、fread、fclose操作讀取
#上述的file_get_contents開啟檔案的方式簡單又粗暴,那麼接下來的幾個
resource fopen ( string $文件名, string 模式) string fread ( resource $操作资源, int 读取长度) bool fclose ( resource $操作资源 )
透過上面的函數我們來講解資源類型的通常操作方式:
開啟資源
fopen函數 fopen函數的功能是開啟文件,參數主要有兩個:
檔案開啟的路徑
開啟檔案的模式
傳回類型是一個資源類型,資源類型需要其他的函數來操作這個資源。所有的資源有開啟就要有關閉。
fread函數: 函數的功能的功能是讀取開啟的檔案資源。讀取指定長度的檔案資源,讀取一部分向後移動一部分。至到文件結尾。
fclose函數 :fclose函數的功能是關閉資源。資源有開啟就有關閉。
接下來要為大家介紹fopen函數的模式:
r
只讀方式打開,並將檔案指標指向檔案頭。
r
讀寫入方式打開,將檔案指標指向檔案頭。
w
寫入方式打開,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則嘗試建立
w
讀寫方式打開,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則嘗試建立
a
寫入方式打開,並將檔案指標指向檔案結尾。如果檔案不存在則嘗試建立
a
讀寫方式打開,並將檔案指標指向檔案結尾。如果檔案不存在則嘗試建立之
x
建立並以寫入方式打開,將檔案指標指向檔案頭。如果檔案已存在,則 fopen() 呼叫失敗並傳回 FALSE,並產生一條 E_WARNING 層級的錯誤訊息。如果檔案不存在則嘗試建立
x
建立並以讀取和寫入方式打開,並將檔案指標指向檔案頭。如果檔案已存在,則 fopen() 呼叫失敗並傳回 FALSE,並產生一條 E_WARNING 層級的錯誤訊息。如果檔案不存在則嘗試建立
推薦學習:《PHP影片教學》
以上是PHP中怎樣讀取檔案? (分享總結)的詳細內容。更多資訊請關注PHP中文網其他相關文章!