PHP學習文件操作

將數據寫或讀入文件,基本上分爲三個步驟:

1.         打開一個文件(如果存在)

2.         /讀文件

3.         關閉這個文件

 

l打開文件

在打開文件文件之前,我們需要知道這個文件的路徑,以及此文件是否存在。

 

$_SERVER[“DOCUMENT_ROOT”]內置全局變量,來獲得站點的相對路徑。如下:

$root = $_SERVER[“DOCUMENT_ROOT”];

 

在用函數file_exists()來檢測文件是否存在。如下:

If(!file_exists("$root/order.txt")){echo ‘文件不存在’;}

 

接下來用fopen()函數打開這個文件。

$fp = fopen("$root/order.txt",'ab');

 

fopen()函數,接受2個或3個或4個參數。

第一個參數爲文件路徑,第二個爲操作方式(讀//追加等等),必選參數。

$fp = fopen("$root/order.txt",'ab');

 

第三個爲可選參數,如果需要PHPinclude_path中搜索一個文件,就可以使用它,不需要提供目錄名或路徑。

$fp = fopen("order.txt",'ab',true);

 

第四個也爲可選參數,允許文件名稱以協議名稱開始(如http://)並且在一個遠程的位置打開這個文件,也支持一些其他的協議,比如ftp等等。

 

如果fopen()成功的打開一個文件,就返回一個指向此文件的指針。在上面我們保存到了$fp變量中。

 

附文件模式圖

l寫文件

PHP中寫文件比較簡單。直接用fwrite()函數即可。

fwrite()的原型如下

int fwrite(resource handle,string string [,int length]);

 

第三個參數是可選的,表明寫入文件的最大長度。

可以通過內置strlen()函數獲得字符串的長度,如下:

fwrite($fp,$outputinfo,strlen($outputinfo));

 

此函數告訴PHP$outputinfo中的信息保存到$fp指向的文件中。

l讀文件

1. 以只讀模式打開文件

仍然使用fopen()函數,但只讀模式打開文件,就用“rb”文件模式。如下:

$fp = fopen(“$root/order.txt”,’rb’);

2. 知道何時讀完文件

我們用while循環來讀取文件內容,用feof()函數,作爲循環條件的終止條件。如下:

while(!feof($fp)){

         
//要處理的信息

}

3.每次讀取一行記錄

fgets()函數可以從文本文件中讀取一行內容。如下:

$fp = fopen("$root/order.txt",'rb');

while(!feof($fp)){

         
$info = fgets($fp,999);

         
echo $info.'<br />';

}

fclose($fp);

 

這樣,他將不斷的讀入數據,直到讀取一個換行符(\n)或者文件結束符EOF,或者是從文件中讀取了998B,可以讀取的最大長度爲指定的長度減去1B

4.讀取整個文件

PHP提供了4中不同的方式來讀取整個文件。

a).readfile()函數

         它可以不用先fopen($path)文件和關閉文件,也不用echo,直接使用即可。如下:        

 readfile(“$root/order.txt”);

         它會自動把文件的信息,輸出到瀏覽器中。它的原型如下:         

Int readfile(string filename,[int use_include_path[,resource context]]);

         第二個可選參數指定了PHP是否在include_path中查找文件,這一點於fopen函數一樣,返回值爲從文件中讀取的字節總數。

         注:直接使用,不用fopenfclose

b).fpassthru()函數

         要使用這個函數,必須先fopen()打開一個文件。然後將文件的指針作爲參數傳遞給fpassthru(),這樣就可以把文件指針所指向的文件內容輸出。然後再將這個文件關閉。如下:         

$fp = fopen(“$root/order.txt”,'rb');
fpassthru($fp);
fclose($fp);

         返回值同樣爲從文件中讀取的字節總數。

         注:必須fopenfclose

c).file()函數

         除了將文件輸出到瀏覽器中外,他和readfile()函數是一樣的,它把結果發送到一個數組中。如下:         

$fileArray = file(“$root/order.txt”);

         文件中的每一行,將作爲數組的每一個元素。

         注:直接使用,不用fopenfclose

d).file_get_contents()函數

readfile()相同,但是該函數將以字符串的形式返回文件內容,而不是將文件內容直接輸出到瀏覽器中,也就是必須使用echo 輸出,如下:

echo file_get_contents(“$root/order.txt”);

注:直接使用,不用fopenfclose

5.讀取一個字符

fgetc()函數從一個文件中一次讀取一個字符,它具有一個文件指針函數,這也是唯一的參數,而且它返回下一個字符。如下:

$fp = fopen("$root/order.txt",'rb');

while(!feof($fp)){

         
$char = fgetc($fp);            

         
if(!feof($fp)){

                   
echo ($char == "\n" ? '<br />' : $char);

         }

}

fclose($fp);

注:fgetc()函數的一個缺點就是它返回文件的結束符EOF,而fgets()則不會。讀取字符後還需要判斷feof()

6. 讀取任意長度

fread()函數即爲從文件中讀取任一長度的字節,函數原型如下:

string fread(resource fp,int length);

使用該函數時,它或者是讀滿了length參數所指定的字節數,或者是讀到了文件的結束。

$fp = fopen("$root/order.txt",'rb');
echo fread($fp,10); //讀取10個字節
fclose($fp);

l關閉文件

關閉文件比較簡單,直接調用fclose()函數即可,如果返回true,則表明成功,反之。如下:

fclose($fp);

l刪除文件

unlink()函數(沒有名爲delete的函數),如下:

unlink("$root/order.txt");

l確定文件大小

可以使用filesize()函數來查看一個文件的大小(字節爲單位),如下: 

echo filesize("$root/order.txt");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章