程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP文件讀寫操作相關函數總結

PHP文件讀寫操作相關函數總結

編輯:PHP綜合

一、fwrite()寫入文件

將程序中的數據保存到文件中比較容易,使用fwrite()函數就可以將字符串內容寫入文件中。在文件中中通過字符序列\n表示換行符,表示文件中一行的末尾。當需要一次輸入或輸出一行信息時,請記住這一點。不同的操作系統具有不同的結束符號,基於UNIX的系統使用“\n”作為行結束字符,基於Windows系統使用“\r\n”作為行結束字符,基於Macintosh的系統使用“\r”作為行結束字符。當要寫入一個文本文件並想插入一個新行時,需要使用相應操作系統的行結束符號。函數fwrite()的原型如下所示:
復制代碼 代碼如下:
int fwrite(resource handle,string string[,int length])           //寫入文件

第一個參數需要提供fopen()函數打開的文件資源,該函數將第二個參數提供的字符串內容輸出到由第一個參數指定的資源中。如果給出了第三個可選參數lenth,fwrite()將在寫入了length個字符時會停止。否則將一直寫入,直到到達內容結尾時才停止。如果寫入的內容少於length個字節,該函數也會在寫完全部內容後停止。函數fwrite()執行完成以後會返回寫入的字符數,出現錯誤時則返回FALSE。下面的代碼是寫入文件的一個示例。

復制代碼 代碼如下:
<?php
//聲明一個變量用來保存文件名
$fileName = "data.txt";
//使用fopen()函數以只寫的模式打開文件,如果不存在則創建它,打開失敗則通過程序
$handle = fopen($fileName,'w') or die('打開<b>'.$fileName.'</br>文件失敗!!');
//循環10次寫入10行數據到文件中
for($row=0;$row<10;$row++){
fwrite($handle, $row.":www.lampbrother.net\n");
}
fclose($handle);
?>

該程序執行後,如果當前目錄下存在data.txt文件,則清空該文件並寫入10行數據。如果不存在data.txt文件,則會創建該文件並將10行數據寫入。另外寫入文件還可以使用fputs()函數,該函數是fwrite()函數的別名函數如果需要快速寫入文件,可以使用file_put_contents()函數,和依次調用fopen(),fwrite()以及fclose()函數的功能一樣。該函數的使用代碼如下所示:

復制代碼 代碼如下:
<?php
//聲明一個變量用來保存文件名
$fileName = "data.txt";
//聲明一個變量用來保存被寫入文件中的數據
$data = "共10行數據\n";
for($row=0;$row<10;$row++){
//將10數據都存放到一個字符串變量中
$data .= $row.":www.lampbrother.net\n";
}
//一次將所有數據寫入到指定的文件中
file_put_contents($fileName, $data);
?>

該函數可以將數據直接寫入到指定的文件中。如果同時調用多次時,並向同一個文件中寫入數據,則文件中只保存了最後一次調用該函數寫入的數據。因為在每次掉喲哦那個時都會重新打開文件並將文件中原有的數據清空,所以不能像第一個程序那樣連續寫入多行數據。

二、讀取文件內容

在PHP中提供了多個從文件中讀取內容的標准函數,可以根據它們的功能特性在程序中選擇哪個函數使用。這些函數功能及其描述如下表所示。

在讀取文件時,不僅要注意行結束符號“\n”,程序也需要一種標准的方式來識別何時到達文件的末尾,這個標准通常成為EOF(End Of File)字符。EOF是非常重要的概念,幾乎每種主流的編程語言中都提供了相應的內置函數,來分析是否到達了文件EOF。在PHP中,使用feof()函數。該函數接受一個打開的文件資源,判斷一個文件指針是否位於文件的結束處,如果在文件末尾處,則返回TRUE。

①函數fread()

該函數用來在打開的文件中讀取指定長度的字符串。也可以安全用於二進制文件,在區分二進制文件和文本文件的系統上(如Windows)打開文件時,fopen()函數的mode參數要加上'b'。函數fread()的原型如下所示:
復制代碼 代碼如下:
string fread(int handle,int length)         //讀取打開的文件

該函數從文件指針資源handle中讀取最多length個字節。在讀取完length個字節數,或到達EOF時,或(對於網絡流)當一個包可用時都會停止讀取文件,就看先碰到哪種情況了。該函數返回讀取的內容字符串,如果失敗則返回FALSE。函數的使用代碼如下所示:
復制代碼 代碼如下:
<?php
//從文件中讀取指定字節數的內容存入到一個變量中
$filename = "data.txt";
$handle = fopen($filename, 'r') or die("文件打開失敗 ");
$contents = fread($handle, 100);         //從文件中讀取100個字節
fclose($handle);         //關閉文件資源
echo $contents;          //將從文件中讀取的內容輸出
 
//從文件中讀取全部內容到一個變量中,每次讀取一部分,循環讀取
$filename = "c:\\files\\somepic.gif";
$handle = fopen($filename, 'rb') or die("文件打開失敗");     //以只讀的方式,模式加了‘b'
$contents = "";
while(!feof($handle)){          //使用feof()判斷文件結尾
$contents .=fread($handle, 1024);        //每次讀取1024個字節
}
fclose($handle);       //關閉文件資源
echo $contents;         //將從文件中讀取的全部內容輸出
 
//另一種從文件中讀取全部內容的方法
$filename = "data.txt";
$handle = fopen($filename, "r")or die("文件打開失敗");
$contents = fread($handle, filesize($filename));        //使用fielsize()函數一起讀出
fclose($handle);
echo $contents;
?>

如果你只是想將一個文件的內容讀入到一個字符串中,可以用file_get_contents()函數,它的性能比上面的代碼好得多。file_get_contents()函數是用來將文件的內容讀入到一個字符串中的首選方法,如果操作系統支持,還會使用內存映射技術來增強性能。該函數的使用代碼如下所示:
復制代碼 代碼如下:
<?php
echo file_get_contents("data.txt"); //讀取文本文件中的內容並輸出
echo file_get_contents("c:\\files\\somepic.gif"); //讀取二進制文件中的內容並輸出
?>

②函數fgets()、fgetc()

fgets()該函數一次至多從打開的文件資源中讀取一行內容。函數fgets()的原型如下所示:
復制代碼 代碼如下:
string fgets(int handle[,int length])                             //從打開的文件中返回一行

第一個參數提供使用fopen()函數打開的資源。如果提供了第二個可選參數length,該函數返回length-1個字節。或者返回遇到換行或EOF之前讀取的所有內容。如果忽略可選的length參數,默認為1024個字符。在大多數情況下,這意味著fgets()函數將讀取到1024個字符前遇到換行符號,因此每次成功調用都會返回下一行。如果讀取失敗則返回FALSE。該函數的使用代碼如下所示:
復制代碼 代碼如下:
<?php
$handle = fopen("data.txt", "r") or die("文件打開失敗 "); //以只讀模式打開文件
while(!feof($handle)){
$buffer = fgets($handle,4096); //一次讀取一行內容
echo $buffer."<br>"; //輸出每一個航
}
fclose($handle);
?>

函數fgetc()在打開的文件資源中只讀取當前指針位置處的一個字符。如果遇到文件結束標志EOF,則返回FALSE值。該函數的使用代碼如下所示:

復制代碼 代碼如下:
<?php
$fp = fopen('data.txt','r') or die("文件打開失敗");
while(false !==($char = fgetc($fp))){
echo $char."<br>";
}
?>

③函數file()

該函數非常有用,與file_get_contents()類似,不需要使用fopen()函數打開文件,不同的是file()函數可以把整個文件讀入到一個數組中。數組中的每個元素對應文件中相應的行,各元素由換行符分割,同時換行符仍附加在每個元素的末尾。這樣,就可以使用數組的相關函數對文件內容進行處理。該函數的使用代碼如下所示:
復制代碼 代碼如下:
<?php
//將文件test.txt中的內容讀入到一個數組中,並輸出
print_r(file(test.txt));
?>

④函數readfile()

該函數可以讀取指定的整個文件,立即輸出到輸出緩沖區,並返回讀取的字節數。該函數也不需要使用fopen()函數打開文件。在下面的示例中,輕松地將文件內容輸出到浏覽器。代碼如下所示:
復制代碼 代碼如下:
<?php
//直接將文件data.txt中的數據讀出並輸出到浏覽器
readfile("data.txt");
?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved