php 讀取文件
我們在上一節(jié)當(dāng)中,我們講到了可以進行文件操作。而讀取文件是一個最最常用的功能。
readfile讀取文件
那如何讀取一個文件呢?我們先學(xué)一個函數(shù)。
int readfile ( string $文件名)
功能:傳入一個文件路徑,輸出一個文件。
下面的這一段代碼中,只要傳入文件名或者指定的文件路徑就把文件讀取出來了。
<?php //linux類的讀了方式 readfile("/home/paul/test.txt"); //windows類的讀取方式 readfile("c:\boot.ini"); ?>
注意:上面的代碼中windows的斜線是斜線,可能會轉(zhuǎn)義掉一些字符。因此,我們寫的時候?qū)懮蟽蓚€斜線。
file_get_contents打開文件
上面的是單純打文件就直接輸出了,有沒有打開文件后,能夠賦值給一個變量的操作方式呢。
PHP當(dāng)然會提供這種方式。這個方式就是PHP打開文件并返回內(nèi)容的方式之一,我們來看看函數(shù):
string file_get_contents ( string filename)
功能:傳入一個文件或文件路徑,打開這個文件返回文件的內(nèi)容。文件的內(nèi)容是一個字符串。
<?php $filename = 'NoAlike.txt'; $filestring = file_get_contents($filename); echo $filestring; ?>
上面的代碼,就打開了一個文件,并且將文件當(dāng)中的內(nèi)容進行了輸出。
我們來針對之前的知識把代碼進行一下擴展。用一用之前的知識點。
<?php //假設(shè)我們有一個多行的文件叫NoAlike.txt,沒有的話你可以新建一個這個文件 $filename = 'NoAlike.txt'; //打開這個文件,將文件內(nèi)容賦值給$filestring $filestring = file_get_contents($filename); //因為每一行有一個回車即\n,我用\n來把這個字符串切割成數(shù)組 $filearray = explode("\n", $filestring); //把切割成的數(shù)組,下標賦值給$key,值賦值給$val,每次循環(huán)將$key加1。 while (list($key, $val) = each($filearray)) { ++$key; $val = trim($val); //用的單引號,單引號不解釋變量進行了拼接而已 print 'Line' . $key .':'. $val.'<br />'; } ?>
上面,我們就把之前所學(xué)的知識進行了組合。
fopen、fread、fclose操作讀取文件
上面file_get_contents打開文件的方式簡單、粗暴。下面的
resource fopen ( string $文件名, string 模式)
string fread ( resource $操作資源, int 讀取長度)
bool fclose ( resource $操作資源 )
通過上面的函數(shù)我們來講解資源類型的通常操作方式:
1.打開資源
2.使用相關(guān)函數(shù)進行操作
3.關(guān)閉資源
fopen函數(shù)?fopen函數(shù)的功能是打開文件,參數(shù)主要有兩個:
1.文件打開的路徑
2.打開文件的模式
返回類型是一個資源類型,我們第一次遇到了之前基礎(chǔ)類型的時候講到的資源類型。
資源類型需要其他的函數(shù)來操作這個資源。所有的資源有打開就要有關(guān)閉。
fread函數(shù)?函數(shù)的功能的功能是讀取打開的文件資源。讀取指定長度的文件資源,讀取一部份向后移動一部份。至到文件結(jié)尾。
fclose函數(shù)?fclose函數(shù)的功能是關(guān)閉資源。資源有打開就有關(guān)閉。
了解完函數(shù),后兩個函數(shù)比較簡單。而fopen函數(shù)的模式到底是什么,fopen的模式有下面幾個,我們來講一下fopen的模式:
模式 | 說明 |
---|---|
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í)r模式,下結(jié)課我們在將寫入的時候再來講講其他幾個模式。
我們先會讀取文件了,才能很好的掌握寫入文件。
1.打開文件
<?php //你可以創(chuàng)建一個NoAlike.txt,以只讀模式打開 $fp = fopen('NoAlike.txt', "r"); //var_dump()操作一下$fp看看效果,輸出的是不是只有類型提示的是resource var_dump($fp); ?>
2.讀取文件
<?php $fp = fopen('NoAlike.txt', "r"); //打開一個文件類型后,讀取長度 $contents = fread($fp, 1024); ?>
3.關(guān)閉文件
<?php $fp = fopen($filename, 'r'); $contents = fread($fp, 1024); fclose($fp); echo $contents; ?>
其他注意事項:
模式 | 說明 |
---|---|
t | windows下將n轉(zhuǎn)為rn |
b | 二進制打開模式 |
說明:
實驗無法讓肉眼看到這個實驗效果。大家記住有這個特點即可。
Windows 下提供了一個文本轉(zhuǎn)換標記('t')可以透明地將 n 轉(zhuǎn)換為 rn。
與此對應(yīng)還可以使用 'b' 來強制使用二進制模式,這樣就不會轉(zhuǎn)換數(shù)據(jù)。要使用這些標記,要么用 'b' 或者用 't' 作為 mode 參數(shù)的最后一個字符。