国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - PHP教程 - PHP文件操作實(shí)現(xiàn)代碼分享

PHP文件操作實(shí)現(xiàn)代碼分享

2019-12-11 13:28PHP教程網(wǎng) PHP教程

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

將數(shù)據(jù)寫或讀入文件,基本上分為三個(gè)步驟: 
1. 打開(kāi)一個(gè)文件(如果存在) 
2. 寫/讀文件 
3. 關(guān)閉這個(gè)文件 
l打開(kāi)文件 
在打開(kāi)文件文件之前,我們需要知道這個(gè)文件的路徑,以及此文件是否存在。 
用$_SERVER[“DOCUMENT_ROOT”]內(nèi)置全局變量,來(lái)獲得站點(diǎn)的相對(duì)路徑。如下: 
$root = $_SERVER[“DOCUMENT_ROOT”]; 
在用函數(shù)file_exists()來(lái)檢測(cè)文件是否存在。如下: 
If(!file_exists("$root/order.txt")){echo ‘文件不存在';} 
接下來(lái)用fopen()函數(shù)打開(kāi)這個(gè)文件。 
$fp = fopen("$root/order.txt",'ab'); 
fopen()函數(shù),接受2個(gè)或3個(gè)或4個(gè)參數(shù)。 
第一個(gè)參數(shù)為文件路徑,第二個(gè)為操作方式(讀/寫/追加等等),必選參數(shù)。 
$fp = fopen("$root/order.txt",'ab'); 
第三個(gè)為可選參數(shù),如果需要PHP在include_path中搜索一個(gè)文件,就可以使用它,不需要提供目錄名或路徑。 
$fp = fopen("order.txt",'ab',true); 
第四個(gè)也為可選參數(shù),允許文件名稱以協(xié)議名稱開(kāi)始(如http://)并且在一個(gè)遠(yuǎn)程的位置打開(kāi)這個(gè)文件,也支持一些其他的協(xié)議,比如ftp等等。 
如果fopen()成功的打開(kāi)一個(gè)文件,就返回一個(gè)指向此文件的指針。在上面我們保存到了$fp變量中。 

附文件模式圖

PHP文件操作實(shí)現(xiàn)代碼分享
寫文件 
在PHP中寫文件比較簡(jiǎn)單。直接用fwrite()函數(shù)即可。 
fwrite()的原型如下 

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

第三個(gè)參數(shù)是可選的,表明寫入文件的最大長(zhǎng)度。 
可以通過(guò)內(nèi)置strlen()函數(shù)獲得字符串的長(zhǎng)度,如下: 

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

此函數(shù)告訴PHP將$outputinfo中的信息保存到$fp指向的文件中。 
l讀文件 
1. 以只讀模式打開(kāi)文件 
仍然使用fopen()函數(shù),但只讀模式打開(kāi)文件,就用“rb”文件模式。如下: 

$fp = fopen(“$root/order.txt”,'rb'); 
2. 知道何時(shí)讀完文件 
我們用while循環(huán)來(lái)讀取文件內(nèi)容,用feof()函數(shù),作為循環(huán)條件的終止條件。如下: 

while(!feof($fp)){ 
//要處理的信息 

3.每次讀取一行記錄 
fgets()函數(shù)可以從文本文件中讀取一行內(nèi)容。如下: 

復(fù)制代碼代碼如下:


$fp = fopen("$root/order.txt",'rb'); 
while(!feof($fp)){ 
$info = fgets($fp,999); 
echo $info.'<br />'; 

fclose($fp); 


這樣,他將不斷的讀入數(shù)據(jù),直到讀取一個(gè)換行符(\n)或者文件結(jié)束符EOF,或者是從文件中讀取了998B,可以讀取的最大長(zhǎng)度為指定的長(zhǎng)度減去1B。 
4.讀取整個(gè)文件 
PHP提供了4中不同的方式來(lái)讀取整個(gè)文件。 
a).readfile()函數(shù) 
它可以不用先f(wàn)open($path)文件和關(guān)閉文件,也不用echo,直接使用即可。如下: 
readfile(“$root/order.txt”); 
它會(huì)自動(dòng)把文件的信息,輸出到瀏覽器中。它的原型如下: 
Int readfile(string filename,[int use_include_path[,resource context]]); 
第二個(gè)可選參數(shù)指定了PHP是否在include_path中查找文件,這一點(diǎn)于fopen函數(shù)一樣,返回值為從文件中讀取的字節(jié)總數(shù)。 
注:直接使用,不用fopen或fclose 
b).fpassthru()函數(shù) 
要使用這個(gè)函數(shù),必須先f(wàn)open()打開(kāi)一個(gè)文件。然后將文件的指針作為參數(shù)傳遞給fpassthru(),這樣就可以把文件指針?biāo)赶虻奈募?nèi)容輸出。然后再將這個(gè)文件關(guān)閉。如下: 
$fp = fopen(“$root/order.txt”,'rb'); 
fpassthru($fp); 
fclose($fp); 
返回值同樣為從文件中讀取的字節(jié)總數(shù)。 
注:必須fopen和fclose 
c).file()函數(shù) 
除了將文件輸出到瀏覽器中外,他和readfile()函數(shù)是一樣的,它把結(jié)果發(fā)送到一個(gè)數(shù)組中。如下: 
$fileArray = file(“$root/order.txt”); 
文件中的每一行,將作為數(shù)組的每一個(gè)元素。 
注:直接使用,不用fopen和fclose 
d).file_get_contents()函數(shù) 
于readfile()相同,但是該函數(shù)將以字符串的形式返回文件內(nèi)容,而不是將文件內(nèi)容直接輸出到瀏覽器中,也就是必須使用echo 輸出,如下: 

echo file_get_contents(“$root/order.txt”); 
注:直接使用,不用fopen和fclose 
5.讀取一個(gè)字符 
fgetc()函數(shù)從一個(gè)文件中一次讀取一個(gè)字符,它具有一個(gè)文件指針函數(shù),這也是唯一的參數(shù),而且它返回下一個(gè)字符。如下: 

復(fù)制代碼代碼如下:


$fp = fopen("$root/order.txt",'rb'); 
while(!feof($fp)){ 
$char = fgetc($fp); 
if(!feof($fp)){ 
echo ($char == "\n" ? '<br />' : $char); 


fclose($fp); 


注:fgetc()函數(shù)的一個(gè)缺點(diǎn)就是它返回文件的結(jié)束符EOF,而fgets()則不會(huì)。讀取字符后還需要判斷feof()。 
6. 讀取任意長(zhǎng)度 
fread()函數(shù)即為從文件中讀取任一長(zhǎng)度的字節(jié),函數(shù)原型如下: 

string fread(resource fp,int length); 
使用該函數(shù)時(shí),它或者是讀滿了length參數(shù)所指定的字節(jié)數(shù),或者是讀到了文件的結(jié)束。 

復(fù)制代碼代碼如下:


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


l關(guān)閉文件 
關(guān)閉文件比較簡(jiǎn)單,直接調(diào)用fclose()函數(shù)即可,如果返回true,則表明成功,反之。如下: 

fclose($fp); 
l刪除文件 
unlink()函數(shù)(沒(méi)有名為delete的函數(shù)),如下: 

unlink("$root/order.txt"); 
l確定文件大小 
可以使用filesize()函數(shù)來(lái)查看一個(gè)文件的大小(字節(jié)為單位),如下: 
echo filesize("$root/order.txt");

大家也可以參考下面的文章
以下是一篇關(guān)于文件基本讀寫操作的文章,我曾經(jīng)就是看了這篇文章后學(xué)會(huì)文件基本操作的,在這里發(fā)出來(lái)與大家共享: 
讀文件: 
PHP代碼: 

復(fù)制代碼代碼如下:


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


寫文件: 
PHP代碼: 

復(fù)制代碼代碼如下:


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


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

復(fù)制代碼代碼如下:


1. <?php 
2.   
3. $file_name = "data.dat"; 
4. // 絕對(duì)路徑: 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字節(jié),13. 把數(shù)據(jù)追加到文件最后 
14.   
15. fclose($file_pointer); 
16. // 結(jié)束 
17.   
18. print "數(shù)據(jù)成功追加到文件"; 
19.   
20. ?> 
21.   


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

復(fù)制代碼代碼如下:


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 "文件內(nèi)容為 $file_read"; 
24.   
25. ?> 
26.   


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

復(fù)制代碼代碼如下:


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 "數(shù)據(jù)成功寫入文件"; 
23.   
24. ?> 
25.   


雖然"w"模式用來(lái)覆蓋文件, 單我覺(jué)得不適用。 
PHP代碼: 

復(fù)制代碼代碼如下:


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 "數(shù)據(jù)成功寫入文件"; 
27.   
28. ?> 
29.   


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

復(fù)制代碼代碼如下:


//創(chuàng)建類似"../../../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函數(shù)創(chuàng)建目錄 



//調(diào)用如createdirs("xxx/xxxx/xxxx",); 
//原函數(shù)中使用$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; 


這些只是一些基本的關(guān)于文件的操作代碼,相信對(duì)初學(xué)者很有用,在此貼出來(lái),希望有拋磚引玉之功能!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 狠狠操狠狠干 | 精久久久| 日韩国产一区 | 男女啪啪做爰高潮www成人福利 | 久久久久99| 夜夜超碰 | 欧美第一视频 | 看日韩毛片 | 成人中文视频 | 欧美在线a | 亚洲国产视频一区 | 成人高清| 欧美成人h版在线观看 | 欧美激情视频一区二区三区在线播放 | 一区二区免费在线视频 | a视频网站 | 北条麻妃一区二区三区中文字幕 | 亚洲国产精品久久久久 | 欧美区 日韩区 | 午夜在线观看视频网站 | 高清免费av | 97久久精品 | 国产人体视频 | 狠狠干av | 国产97在线播放 | 理论电影在线 | 亚洲免费在线观看 | 久久色av | 日韩一区二区三区在线视频 | 亚洲精品第一区在线观看 | 午夜精品久久久久久久久久久久 | 亚洲精品无码专区在线播放 | 国产一区二区精品在线观看 | 国产精品自产拍在线观看 | 亚洲一区有码 | 亚州男人天堂 | 国产999精品久久久久 | 特级av| 亚洲激情网站 | 在线播放国产一区二区三区 | 91麻豆精品国产91久久久更新时间 |