一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP文件操作實現代碼分享

PHP文件操作實現代碼分享

2019-12-11 13:28PHP教程網 PHP教程

PHP中提供了一系列的I/O函數,能簡捷地實現我們所需要的功能,包括文件系統操作和目錄操作(如“復制[copy]”)。下面給大家介紹的是基本的文件讀寫操作:(1)讀文件;(2)寫文件;(3)追加到文件。

將數據寫或讀入文件,基本上分為三個步驟: 
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'); 
第三個為可選參數,如果需要PHP在include_path中搜索一個文件,就可以使用它,不需要提供目錄名或路徑。 
$fp = fopen("order.txt",'ab',true); 
第四個也為可選參數,允許文件名稱以協議名稱開始(如http://)并且在一個遠程的位置打開這個文件,也支持一些其他的協議,比如ftp等等。 
如果fopen()成功的打開一個文件,就返回一個指向此文件的指針。在上面我們保存到了$fp變量中。 

附文件模式圖

PHP文件操作實現代碼分享
寫文件 
在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函數一樣,返回值為從文件中讀取的字節總數。 
注:直接使用,不用fopen或fclose 
b).fpassthru()函數 
要使用這個函數,必須先fopen()打開一個文件。然后將文件的指針作為參數傳遞給fpassthru(),這樣就可以把文件指針所指向的文件內容輸出。然后再將這個文件關閉。如下: 
$fp = fopen(“$root/order.txt”,'rb'); 
fpassthru($fp); 
fclose($fp); 
返回值同樣為從文件中讀取的字節總數。 
注:必須fopen和fclose 
c).file()函數 
除了將文件輸出到瀏覽器中外,他和readfile()函數是一樣的,它把結果發送到一個數組中。如下: 
$fileArray = file(“$root/order.txt”); 
文件中的每一行,將作為數組的每一個元素。 
注:直接使用,不用fopen和fclose 
d).file_get_contents()函數 
于readfile()相同,但是該函數將以字符串的形式返回文件內容,而不是將文件內容直接輸出到瀏覽器中,也就是必須使用echo 輸出,如下: 

echo file_get_contents(“$root/order.txt”); 
注:直接使用,不用fopen和fclose 
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");

大家也可以參考下面的文章
以下是一篇關于文件基本讀寫操作的文章,我曾經就是看了這篇文章后學會文件基本操作的,在這里發出來與大家共享: 
讀文件: 
PHP代碼: 

復制代碼代碼如下:


1. <?php 
2.   
3. $file_name = "data.dat"; 
4. // 要讀取的文件的絕對路徑: homedata.dat 
5.   
6. $file_pointer = fopen($file_name, "r"); 
7. // 打開文件,8. "r" 是一種模式,9. 或者說我們要進行的操作方法,10. 詳見本文后面的介紹 
11.   
12. $file_read = fread($file_pointer, filesize($file_name)); 
13. // 通過文件指14. 針讀取文件內容 
15.   
16. fclose($file_pointer); 
17. // 關閉文件 
18.   
19. print "讀取到的文件內容是: $file_read"; 
20. // 顯示文件內容 
21. ?> 
22.   


寫文件: 
PHP代碼: 

復制代碼代碼如下:


1. <?php 
2.   
3. $file_name = "data.dat"; 
4. // 絕對路徑: homedata.dat 
5.   
6. $file_pointer = fopen($file_name, "w"); 
7. // "w"是一種模式,8. 詳見后面 
9.   
10. fwrite($file_pointer, "what you wanna write"); 
11. // 先把文件剪切12. 為0字節大小,13. 然后寫入 
14.   
15. fclose($file_pointer); 
16. // 結束 
17.   
18. print "數據成功寫入文件"; 
19.   
20. ?> 
21.   


追加到文件后面: 
PHP代碼: 

復制代碼代碼如下:


1. <?php 
2.   
3. $file_name = "data.dat"; 
4. // 絕對路徑: homedata.dat 
5.   
6. $file_pointer = fopen($file_name, "a"); 
7. // "w"模式 
8.   
9. fwrite($file_pointer, "what you wanna append"); 
10. // 不11. 把文件剪切12. 成0字節,13. 把數據追加到文件最后 
14.   
15. fclose($file_pointer); 
16. // 結束 
17.   
18. print "數據成功追加到文件"; 
19.   
20. ?> 
21.   


以上只是簡單介紹,下面我們要討論一些更深層的。 
有時候會發生多人寫入的情況(最常見是在流量較大的網站),會產生無用的數據寫入文件, 例如: 
info.file文件內容如下 -> 
|1|Mukul|15|Male|India (n) 
|2|Linus|31|Male|Finland (n) 
現在兩個人同時注冊,引起文件破壞-> 
info.file -> 
|1|Mukul|15|Male|India 
|2|Linus|31|Male|Finland 
|3|Rob|27|Male|USA| 
Bill|29|Male|USA 
上例中當PHP寫入Rob的信息到文件的時候,Bill正好也開始寫入,這時候正好需要寫入Rob紀錄的'n',引起文件破壞。 
我們當然不希望發生這樣的情況, 所以讓我們看看文件鎖定: 
PHP代碼: 

復制代碼代碼如下:


1. <?php 
2.   
3. $file_name = "data.dat"; 
4.   
5. $file_pointer = fopen($file_name, "r"); 
6.   
7. $lock = flock($file_pointer, LOCK_SH); 
8. // 我使用4.0.2,9. 所以用LOCK_SH,10. 你可能需要直接寫成 1. 
11.   
12. if ($lock) { 
13.   
14. $file_read = fread($file_pointer, filesize($file_name)); 
15. $lock = flock($file_pointer, LOCK_UN); 
16. // 如果版本小于PHP4.0.2,17. 用 3 代替 LOCK_UN 
18.   
19. } 
20.   
21. fclose($file_pointer); 
22.   
23. print "文件內容為 $file_read"; 
24.   
25. ?> 
26.   


上例中,如果兩個文件read.php和read2.php都要存取該文件,那么它們都可以讀取,但是當一個程序需要寫入的時候,它必須等待,直到讀操作完成,文件所釋放。 
PHP代碼: 

復制代碼代碼如下:


1. <?php 
2.   
3. $file_name = "data.dat"; 
4.   
5. $file_pointer = fopen($file_name, "w"); 
6.   
7. $lock = flock($file_pointer, LOCK_EX); 
8. // 如果版本低于PHP4.0.2,9. 用 2 代替 LOCK_EX 
10.   
11. if ($lock) { 
12.   
13. fwrite($file_pointer, "what u wanna write"); 
14. flock($file_pointer, LOCK_UN); 
15. // 如果版本低于PHP4.0.2,16. 用 3 代替 LOCK_UN 
17.   
18. } 
19.   
20. fclose($file_pointer); 
21.   
22. print "數據成功寫入文件"; 
23.   
24. ?> 
25.   


雖然"w"模式用來覆蓋文件, 單我覺得不適用。 
PHP代碼: 

復制代碼代碼如下:


1. <?php 
2.   
3. $file_name = "data.dat"; 
4.   
5. $file_pointer = fopen($file_name, "a"); 
6.   
7. $lock = flock($file_pointer, LOCK_EX); 
8. // 如果版本低于PHP4.0.2,9. 用 2 代替 LOCK_EX 
10.   
11. if ($lock) { 
12.   
13. fseek($file_pointer, 0, SEEK_END); 
14. // 如果版本小于PHP4.0RC1,15. 使用 fseek($file_pointer, filsize($file_name)); 
16.   
17. fwrite($file_pointer, "what u wanna write"); 
18. flock($file_pointer, LOCK_UN); 
19. // 如果版本低于PHP4.0.2,20. 用 3 代替 LOCK_UN 
21.   
22. } 
23.   
24. fclose($file_pointer); 
25.   
26. print "數據成功寫入文件"; 
27.   
28. ?> 
29.   


Hmmm..., 對于追加數據與其他操作有點不同,就是FSEEK! 確認文件指針在文件尾部總是一個好習慣。 
如果是在Windows系統下, 上面的文件中文件名前面需要加上''. 
FLOCK雜談: 
Flock()只在文件打開后才鎖定。 在上列中文件打開后才獲得鎖定,現在文件的內容只是在當時的內容, 而不反映出別的程序操作的結果,因此不只是在文件追加操作,就是對讀取操作也應該使用fseek。 
(此處翻譯可能不是很確切, 但我想意思到了)。 
關于模式: 
'r' - 只讀方式打開, 文件指針置于文件頭 
'r+' - 讀寫方式打開,文件指針置于文件頭 
'w' - 只寫打開,文件指針置于文件頭, 文件被剪切為0字節, 如果文件不存在, 嘗試建立文件 
'w+' - 讀寫打開,文件指針置于文件頭, 文件大小被剪切為0字節,如果文件不存在, 嘗試建立文件 
'a' - 只寫方式打開,文件指針置于文件尾,如果文件不存在,嘗試建立文件 
'a+' - 讀寫打開,文件指針置于文件尾,如果文件不存在, 嘗試建立文件 
順便說一下創建文件目錄的代碼 

復制代碼代碼如下:


//創建類似"../../../xxx/xxx.txt"的目錄 
function createdirs($path, $mode = 0777) //mode 077 

$dirs = explode('/',$path); 
$pos = strrpos($path, "."); 
if ($pos === false) { // note: three equal signs 
// not found, means path ends in a dir not file 
$subamount=0; 

else { 
$subamount=1; 

for ($c=0;$c < count($dirs) - $subamount; $c++) { 
$thispath=""; 
for ($cc=0; $cc <= $c; $cc++) { 
$thispath.=$dirs[$cc].'/'; 

if (!file_exists($thispath)) { 
//print "$thispath"; 
mkdir($thispath,$mode); //mkdir函數創建目錄 



//調用如createdirs("xxx/xxxx/xxxx",); 
//原函數中使用$GLOBALS["dirseparator"]我改成了'/' 
function recur_mkdirs($path, $mode = 0777) //mode 0777 

//$GLOBALS["dirseparator"] 
$dirs = explode($GLOBALS["dirseparator"],$path); 
$pos = strrpos($path, "."); 
if ($pos === false) { // note: three equal signs 
// not found, means path ends in a dir not file 
$subamount=0; 

else { 
$subamount=1; 


這些只是一些基本的關于文件的操作代碼,相信對初學者很有用,在此貼出來,希望有拋磚引玉之功能!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 向日葵视频app下载18岁以下勿看 | 国产东北三老头伦一肥婆 | 国产夜趣福利第一视频 | a天堂视频| 荡娃艳妇系列小说 | 天美传媒传媒免费观看 | 国产精品1024永久免费视频 | a免费看| 国产成人影院在线观看 | 高黄h文各种play | 天堂va在线| 久久www免费人成_看片高清 | 涩涩国产精品福利在线观看 | 艹的好爽 | 精品欧美一区二区在线观看欧美熟 | 女人pp被扒开流水了 | 欧美同志gaypronvideos| 成人福利在线视频免费观看 | 久久这里只精品国产99re66 | 亚洲AV永久无码精品澳门 | 亚洲国产第一区二区三区 | 69日本人 | 欧美日韩国产在线一区 | 日本剧情片在线播放中文版 | 国产小视频网站 | 34g污奶跳舞| 色愉拍亚洲偷自拍 | 国色天香论坛社区在线视频 | 国产免费又粗又猛又爽视频国产 | 成人国产精品一级毛片视频 | 亚洲精品国产精麻豆久久99 | 嗯啊在线观看免费影院 | 护士的小嫩嫩好紧好舒服 | 免费国产高清视频 | 大好硬好深好爽想要视频 | 91高清免费国产自产 | 青青青青在线视频 | 午夜一级| 成人永久免费视频 | 精品视频二区 | 国产乱妇无码大片在线观看 |