關聯課件: 8子項目八 - 圖像處理函數下事(點擊在線預覽)
8學體.3.7 文件系統函數
8刀都.3.7.1 文件很靜系統函數概述
在網絡編程中紅你要用到的文件操作大緻可以分爲兩(liǎng)大類,路的一種(zhǒng)是普通文件的操作,另一種(見靜zhǒng)是數據庫文件的操作。在普通文件的操作中對(duì)記事(s看到hì)本文件的操作最爲簡單,下子來面(miàn)就(jiù)來探讨一下PHP對(duì)文件(以記事舊紅(shì)本爲例)的操作。PHP提供她器了一些文件操作的函數,常用函數如表6-7所示。
有關詳細功能(néng)和慢厭使用方法請參見PHP 5的幫助文檔。
8.3.7.2 了微; 文件的打開(kāi)與讀寫
要想利用PHP對(duì)文件進(j房慢ìn)行操作,就(jiù)要先了解有關PHP中打開(k書機āi)和讀寫文件的相關函數。
1.fopen()函數
fopen()函數子吃格式如下:
resource fopen (string filename,車上 string mode [, bool 跳明use_include_path ])
fopen鄉司()函數的作用是打開(kāi)文件或者URL。其中file術花name是要打開(kāi)的文件名,必須爲字符串形式。如果filename是“不吃scheme://...”(如https:樹煙//...)的格式,則被(bèi)當成(chéng)一個URL,日還PHP將(jiāng)搜索協議處理器(也被(bèi)稱爲封裝協議)來處服時理此模式。如果PHP認爲filename指定的是一個本家錯地文件(如“num.txt”),將(jiāng)嘗試在該文件上打開身雪(kāi)一個流。該文件必須是PH師地P可以訪問的,因此需要确認文件訪問權限允許該訪問。mode是打開(k放也āi)文件的方式,必須爲字符形式,可以取以下幾個值。
'r':隻讀形式,文件指針指向(xiàng)文件的開(kāi現窗)頭。
'r ':可讀可寫,文件指針指向(xiàng)技物文件的開(kāi)頭。
'w':隻寫形式,文件指針指向(xiàng)文件的開師紅(kāi)頭,打開(kāi)同時做習(shí)清除所有内容,如果文件不存在,將(jiāng)嘗試建立文件。
'w ':可讀可寫,文件也不指針指向(xiàng)文件的開(k了答āi)頭,打開(kāi)同時(shí)清除所有内容,如果文件不存在,多好將(jiāng)嘗試建立文件。
'a':追加形式(隻可寫入),文件指針指向(xiàng厭能)文件的最後(hòu),如果文件不存在,將(jiāng)嘗試建立文件。
'a ':可讀可寫,文件指針指向(xiàng)文件的最相也後(hòu),如果文件不存在,將(jiāng)嘗試建立文件。
2.fgets()函數
fgets城工()函數的格式如下:
string fgets (in也理t handle [, int len化算gth])
fgets()函數的功身城能(néng)是從文件指針中讀取一行。其中一和handle是要讀入數據的文件流指針,由fopen函數返回數值。len黃輛gth是要讀入的字符個數,實際讀入的字符個數是length-1。
從handle指向(xiàng)的文上信件中讀取一行并返回長(cháng)度最多爲length-1字節都妹的字符串。碰到換行符(包括在返回值中)、EOF或者已經(jīng)習草讀取了length-1字節後(hòu)冷聽停止(看先碰到那一種(zhǒng)情況)。如果沒(méi)有分從指定 length,則默認爲1K,也就(jiù)是說對地(shuō)1024字節。出錯時(shí)返回 FALSE。
3.fwrite()函數
fwrite()函數格式如雜們下:
fwrite()函數的功能(néng)是int fwrite (re拍現source handle, strin多遠g string [, int length])朋西
fwrite()函數的鐵林功能(néng)是寫入文件,與int fputs(resou金物rce handle, string str, int [l費唱ength])功能(néng)相同。
fwri快什te()把string的内容寫入文件指針handle處。如果指定了議樹length,當寫入了 length 個字節或者寫完了 &nbs大船p; string以後(媽物hòu),寫入就(jiù)會(h電可uì)停止。
fwrite()返回算綠寫入的字符數,出現錯誤時(shí)返回FALSE電關。
4.fclose()函數
門師fclose()函數的西格式如下:
bool fclose (resour金市ce handle)
fclose()函數的功能(néng)是水生關閉一個已打開(kāi)的文件指針,即將(jiāng)handle指向(xi如會àng)的文件關閉。如果成(ché的也ng)功則返回TRUE,失敗則返回FA你湖LSE。
文件指針必我計須有效,并且是通過(guò)fopen()或fsockopen()成(chén關短g)功打開(kāi)的。
下面(miàn)就(jiù)用以上幾個簡單林得的文件操作函數來編寫一個文本類型的訪客計數器。
1: <!--文件6-25.php:訪客計數器睡慢-->
2: <html>
3: &nbs紅通p; <head>
4: &nb頻花sp; 街呢 <title>習見訪客計數器</title>
5: 她熱 </head>
6: &n土計bsp; <body>
7: &nbs分著p; 舞票<?php
8: 雜訊 答她 if謝事 (!file_exists("nu黑妹m.txt")){ 樹跳; //如果文件不存在
9: &藍他nbsp; &nb在著sp; &nb南數sp; &爸他nbsp;$fp=fopen("num.t司山xt", "w&q土明uot;); 山嗎 //借助w參數,創建文件
10: 車習  照子; &nb海那sp; fclo音見se($fp); 書吃 &n答錢bsp; &n間要bsp; //關閉文件
11: &厭化nbsp;  廠嗎; &n計訊bsp; &n快數bsp; echo "num.txt文件創建成(chéng)時白功!<br>";
12: 城行 &nbs哥能p; }
13: &n術知bsp; &nbs志老p; $fp=fopen(&q玩店uot;num.txt","r&quo醫劇t;);
14: &nbs子長p; &n拿分bsp; 西照@$num=fgets($fp,12);  明理; &場器nbsp; &n拿理bsp; //讀取11位數字
15: &nb兵大sp;  但土; if ($n遠去um=="") $num=0;
16: 黑話 &nb答林sp; //如果文低森件的内容爲空,初始化爲0
17: 友草 &nb黃媽sp; $num ; &nbs歌靜p; &n雜時bsp;  討歌; &nbs木說p; &nbs木鐵p; 城來 &nbs大風p; //浏覽次數加一術森
18:  司又; &n動黑bsp;  雪做; @fclose($離區fp); &nbs用綠p; &nbs話日p;  分著; 化到 //關閉文件
19: 行事 &哥和nbsp; 朋我$fp=fopen("num.txt", "關微;w"); 朋著  樹說; //隻寫方式打開(從店kāi)num.txt文件
20: &n著車bsp; &nbs山地p; f是服write($fp,$num); &n相火bsp; 亮姐 &nb鄉科sp; //寫入加一後(hòu)結果
21: 相微 &nbs用訊p; fclose($fp); 到化 &術大nbsp; &nbs船爸p; &nb她腦sp; //關閉文件
22: &n報答bsp; &nb紙雪sp; &動東nbsp; echo "您是第".票藍$num."位浏覽者!&些鄉quot;; 章亮//浏覽器輸出浏覽次數
23: &n紙器bsp; ?>
24: </bo就年dy>
25: </html>
當程序6-25.php第一次運行時(shí),其運行結果如圖6-26藍現(a)所示,第二次運行時(shí),其運行效果文看如圖6-26(b)所示。
(a)第一次運行
(b)第二次運行
不現科難發(fā)現制作一個文件類型計他有數器的基本思路是:打開(kāi)一個文件→讀出文件玩影裡(lǐ)面(miàn)的内容(數據)→湖關數據 1後(hòu)再寫入該文件從個→關閉文件。由于當文件以可讀可街媽寫方式打開(kāi)時(shí),文件的内容同時(shí)被(bèi)清空暗遠,所以做文件計數器時(shí)的具體的步驟了能是:以隻讀方式打開(kāi)一個文件→讀出文件裡(lǐ)面(miàn)月為的内容(數據)→關閉文件→再以可讀可寫方式員書打開(kāi)文件→數據 1後(hòu)再寫入該文件→村能關閉文件。
8.3.7.是姐3 目錄的創建、删除與遍曆
目錄的操作主要是利用相關數了的目錄函數來實現的,先來看一下目錄有關的函數。
1)stri物北ng getcwd (void)
功能(néng):取得當前間錢工作目錄。
2)bool ch雜事dir (string directory)
功能(néng):將(jiāng)當紙就前目錄改爲directory。
習讀 3)new dir(sting d行公irectory)
功能(néng):將(jiā體下ng)輸入的目錄名轉換爲一個對(duì頻身)象并返回,如:
class dir {
dir(日嗎string directory )
 那時; string path
reso都工urce handle
亮很string read ( void )
void re化明wind ( void )
vo男農id close ( void )
}
該對(duì行學)象含有2個屬性和3個方法。2個屬性爲:
handle:目錄句柄。
path:打開(kāi)目錄的路徑。
3個方法爲:
read (void):讀取目錄。
rewind (void):複位目錄。
close (void):關閉目錄。
&n頻討bsp;這(zhè)3個方法與後(hòu)姐電面(miàn)的將(jiāng)要介紹的readdir()、rewind問通dir()、closedir()函數的作用相同。中樹
理什4)resource opendir (string紅低 path)
功能(néng):打開(kāi)目錄句柄。p雨場ath爲要打開(kāi)的目錄路徑.坐店
5)笑電string readdir (r動短esource dir_han議歌dle)
功能(néng):返回目錄中下一個文件的文件名。文人器件名以在文件系統中的排序返回。
6)dir_hand街務le爲目錄句柄的resource,之前白畫由opendir()打開(kāi)。窗來
功能(néng):成(chéng)功著外則返回文件名,失敗返回FALSE什白。
7)v通跳oid rewinddir (resource d數間ir_handle)
功能(néng):倒回目錄句柄。將(j請輛iāng)dir_handle相女指定的目錄流重置到目錄的開(kāi)頭不志。dir_handle爲目錄句柄的resou子件rce,之前由opendir()打開(kāi)。
8)void closedir 關信(resource dir_handle)
功能(néng):關閉目錄句柄。關閉由dir_handle指定的森老目錄流。流必須已被(bèi)opendir()打開(kāi)。
9冷公)array scandir (string director也友y [, int sortin醫銀g_order])
功能(néng):列出指定路徑中的文件和目錄。返回一個a坐件rray,包含有director海請y中的文件和目錄。
參數directory是要被(bèi)浏覽的目錄。
參數sorting_order是文件的排列順序,默認去雪的排序順序是按字母升序排列。如白志果使用了可選參數 sorting_order(設爲1),則排序順是飛序是按字母降序排列。
10)bool ch暗畫root (string directory)
將(jiāng)當前進(jìn)我也程的根目錄改變爲directory。
本函數僅在系統支持且運行于CLI、CGI視照或嵌入SAPI版本時(shí)才能(néng)信多正确工作。此外本函數還(hái)需要root權限。
現舉例如下:
1: <!--文件6-26.php:匠筆目錄輸出-->
2: <HT好老ML>
3: <HEAD>
4: &nbs離自p; <TITLE>目錄輸出<黑車;/TITLE>
5: </HE少鐘AD>
6: <BOD樂窗Y>
7: <?php
8:  近視; 音我 &nbs遠花p; $dir=ge知身tcwd(); &n來事bsp; &n唱坐bsp; //獲取當前路徑
9:  議問; &nb人為sp; &哥服nbsp; &nbs草答p; echo getcwd(路低). "<br&g又我t;"; //輸出當前目服船錄
10:  地些;  去外; &n家紅bsp;$files1=scandir($dir冷子); //列出指定路徑中的文哥姐件和目錄
11:  開站; &慢跳nbsp; &nb就司sp; $files2=scandir($di也南r,1);
12: &nb站相sp; 請小  東們; prin工作t_r($files1); 站老; &nb化風sp; &n年明bsp; //輸出指定路徑中的文件和目錄
13: 很腦 &n就音bsp;  冷樂;  討請; print_r($files2鐵什);
14: &n樂聽bsp;  請個; &n頻人bsp; &nbs雪她p; $dir=dir($dir);資長
15: 喝懂  呢男; 理我 &nbs吃問p; echo gettype($dir).&qu化會ot;<br>";
16: 場匠 &nb男新sp; &的年nbsp; echo &q志討uot;目錄句柄:".$dir->草問handle."<br>";
17: &照土nbsp; &n花農bsp; &n亮快bsp;echo "志頻目錄路徑:".$dir->path.&美就quot;<br>";
18: &nbs花店p; &nb車媽sp; &n讀報bsp; while ($entry=$dir->師志;read())
19: &nb煙聽sp; &草機nbsp; 器子 &nb讀著sp; &n的能bsp; ec水商ho $entry.";<br> ";
20: &算冷nbsp; &nb雨刀sp; 資男 $dir-&黃和gt;close();
21: &nb用些sp; &nb還商sp; 讀制 &nb黃船sp;if (chdir(&q她短uot;c:/windows")){
22: &n話姐bsp; &器舞nbsp; &對年nbsp; &n要從bsp; &nb有做sp; &知海nbsp; &n爸火bsp; echo "當前目錄更改成(chéng)少城功:c:/windows<br>";
23: &n光子bsp; &nb光在sp; &校時nbsp; &很知nbsp; &街看nbsp; }els視日e{
24: 空新 &n跳少bsp; &nb玩友sp; &nb筆木sp; &化很nbsp; 內影 echo "當前目錄更改失敗!<br>&會友quot;;
25: 體紅 &nb玩到sp; &n裡自bsp; &校飛nbsp; &nb問答sp; &n很木bsp; }
26: &南是nbsp; ?>
27: </BODY>
28: </HTML>
程序6-26.php運行結果如圖6-27所示。請司
圖6-27 程序6-26東如.php的運行結果
下面(miàn)再來看一個例子,具體體會(huì)一機地下目錄操作在實際中的應用。
1: <!--文件6-子用27.php:遍曆圖片顯示-->
2: <HTML&g慢短t;
3: <HEA明自D>
4: &nbs近上p; <TITLE>遍曆圖片顯示<費討/TITLE>
5: </HEAD但短>
6: <BODY>
7:  工錢; <?php
8: 南事 &nb生鐘sp; &nb化上sp; $addr=&qu舊場ot;./image/";
9: &n離大bsp; &場得nbsp; &nbs能場p; $dir=dir($訊看addr);
10: 生煙 &們山nbsp; 計火 whil要做e ($file_name=$di森子r->read()){
11: &答匠nbsp; 弟一 &nb草空sp; 道窗 &n吧了bsp; if ($fil商電e_name==".&我輛quot; or $file_name=少我=".."){
12: &n站還bsp;  說都; &n呢哥bsp; &nb吧木sp; }else{
13: &nb都友sp; &nbs離做p; &信做nbsp; &nb務廠sp; &nb務視sp; echo "<img src=".銀東$addr.$file_name." widt熱玩h=40 height=
30>&明小;n bsp; "見日;;
14: &nbs雨藍p; 地務 &n業市bsp; &n身和bsp; }
15: &n師門bsp; &畫空nbsp; &話間nbsp; &nbs農月p; }
16: &個來nbsp; ?>
17: 數雨 </BODY>
18: </HTML>空舊
其運行結果如圖6-28所示。
圖6-28 程序6-27.php的運行結果
fopen()函數的作用是打開(kāi)文件或者URL。其中file物要name是要打開(kāi)的文件名,必須爲字符串形式。如果fi藍西lename是“scheme://...”(如http://..白森.)的格式,則被(bèi)當成(chéng)一個URL,P這玩HP將(jiāng)搜索協議處理器(也被(bèi)稱爲封裝協議)來下長處理此模式。如果PHP認爲filen快靜ame指定的是一個本地文件(如“num.txt”),將(jiā去媽ng)嘗試在該文件上打開(kāi)一個流。該文樹知件必須是PHP可以訪問的,因此需要确認文件訪問權限允許該訪問。車畫mode是打開(kāi)文件的方式,必須爲字符形式,可以取以下幾個得嗎值。 'r':隻讀形式,文件指針指向(xiàng)文件的開(kāi)頭。快吧 'r ':可讀可寫,文件大高指針指向(xiàng)文件的開(kāi)頭。人靜 'w':隻寫形式,文件指針指向(xià遠科ng)文件的開(kāi)頭,打開(kāi)同時(shí)清除化土所有内容,如果文件不存在,將(jiāng)嘗試建立文件。 'w 報到':可讀可寫,文件指針指向(xiàng)文件的開(kāi那街)頭,打開(kāi)同時(shí)視很清除所有内容,如果文件不存在,將(日到jiāng)嘗試建立文件。 中街'a':追加形式(隻可寫入),文件指針指向(xiàng)車雨文件的最後(hòu),如果文件不存在,將(jiāng)嘗試建立文件。 藍拍 'a ':可讀可寫,文件指針指向(xià家算ng)文件的最後(hòu),如果文件不存在對校,將(jiāng)嘗試建立文件體數。
通過(guò)這(zhè)節課的學(xué)習,我明白了fclose費兵()函數的功能(néng)是j關閉一個已打開(kāi)的文件指針,即將鄉山(jiāng)handle指向(xiàng)的文件關閉。如果成(chén道問g)功則返回TRUE,失敗則返回FALSE報拿。
更加清晰明了