8PHP文件訪問(wèn)技術(shù)_第1頁(yè)
8PHP文件訪問(wèn)技術(shù)_第2頁(yè)
8PHP文件訪問(wèn)技術(shù)_第3頁(yè)
8PHP文件訪問(wèn)技術(shù)_第4頁(yè)
8PHP文件訪問(wèn)技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、PHP 動(dòng)態(tài)網(wǎng)站程序設(shè)計(jì)(第2版) 唐四薪 主編 人民郵電出版社ISBN:978-7-115-50524-8 2020年3月第6章 PHP文件訪問(wèn)技術(shù) 6.1 文件訪問(wèn)技術(shù)PHP可對(duì)服務(wù)器端的文件或文件夾進(jìn)行操作對(duì)文件的操作包括創(chuàng)建文本文件、寫入文本文件、讀取文本文件等。對(duì)文件夾的操作包括創(chuàng)建、復(fù)制、移動(dòng)或刪除文件夾等 6.1 文件訪問(wèn)函數(shù)PHP對(duì)文件操作的一般流程是: 打開(kāi)文件; 讀取或?qū)懭胛募?;關(guān)閉文件 6.1.1打開(kāi)文件fopen()函數(shù)用來(lái)打開(kāi)文件。其語(yǔ)法格式為:fopen(string filename, string mode) 文件路徑或URL網(wǎng)址 打開(kāi)方式:r 只讀 w 寫入a

2、 追加寫入 例子$file = fopen (c:datainfo.txt, r);$file = fopen (/, r); $file = fopen (ftp:/user:password/exam.txt, w);$file = fopen (/home/rasmus/file.txt, r);/以二進(jìn)制寫入方式打開(kāi)unix系統(tǒng)目錄下的file.gif文件$file = fopen (/home/rasmus/file.gif, wb);? fopen()函數(shù)參數(shù)mode的可選值 r以只讀方式打開(kāi),如果文件不存在將出錯(cuò)w以寫入方式打開(kāi),將文件指針指向文件頭部,并刪除文件內(nèi)容,如果文件不

3、存在則創(chuàng)建文件a以追加寫入方式打開(kāi),將文件指針指向文件末尾,如果文件不存在則創(chuàng)建文件r+以讀寫方式(先讀后寫)打開(kāi),將文件指針指向文件頭部。w+以讀寫方式(先寫后讀)打開(kāi),將文件指針指向文件頭部,并刪除文件內(nèi)容a+以追加讀寫方式打開(kāi),將文件指針指向文件末尾。x以只寫方式創(chuàng)建并打開(kāi)文件,并將文件指針指向文件頭。如果指定文件存在,就會(huì)打開(kāi)失敗x+以讀寫方式創(chuàng)建并打開(kāi)文件,并將文件指針指向文件頭。如果指定文件存在,就會(huì)打開(kāi)失敗b以二進(jìn)制模式打開(kāi),可與 r、w、a合用。關(guān)閉文件 文件內(nèi)容讀寫結(jié)束后,必須關(guān)閉文件 fclose($file); /關(guān)閉$file指向的文件 6.1.2 讀取文件fread(

4、)讀取整個(gè)文件或文件中指定長(zhǎng)度的字符串,可用于二進(jìn)制文件讀取fgets()讀取文件中的一行字符fgetss()讀取文件中的一行字符,并去掉所有HTML和PHP標(biāo)記fgetc()讀取文件中的一個(gè)字符file_get_contents()將文件讀入字符串file()把文件讀入到一個(gè)數(shù)組中readfile()讀取一個(gè)文件,并輸出到輸出緩沖1. fread()函數(shù)fread()可讀取指定長(zhǎng)度的文件內(nèi)容string fread(resource handle, int length)示例程序?$file=fopen(test.txt,r);$str=fread($file,filesize(test.t

5、xt);echo nl2br($str);/將回車轉(zhuǎn)fclose($file);? 2. fgets()函數(shù)fgets()用來(lái)讀取文本文件中的一行 string fgets(resource handle, int length) 示例程序?$file=fopen(test.txt,r); while(!feof($file)$str=fgets($file);/讀取文件中的一行,讀取完后指針會(huì)指向下一行echo $str.;fclose($file);/關(guān)閉文件? 判斷文件指針是否已到達(dá)文件末尾 3. fgetss ()函數(shù)fgetss()函數(shù):從文件指針處讀取一行的數(shù)據(jù),類似于 fgets

6、()差別在于fgetss()函數(shù)會(huì)刪除文件內(nèi)的HTML和PHP標(biāo)記。4. fgetc()函數(shù)fgetc()函數(shù)用來(lái)從文件指針處讀取一個(gè)字符 5. file_get_contents()函數(shù)無(wú)須經(jīng)過(guò)打開(kāi)文件及關(guān)閉文件操作就可讀取文件中的全部?jī)?nèi)容 示例程序6. file()函數(shù)讀取整個(gè)文件并將其保存到一個(gè)數(shù)組中,數(shù)組中每個(gè)數(shù)組元素對(duì)應(yīng)文檔中的一行,該函數(shù)還可用于讀取二進(jìn)制文件 6.1.3 移動(dòng)文件指針移動(dòng)文件指針到文件的開(kāi)頭bool rewind(resource handle)返回文件指針的當(dāng)前位置int ftell(resource handle) 移動(dòng)文件指針到指定位置int fseek(r

7、esource handle, int offset, int origin) 6-3.php 0 文件開(kāi)頭1 當(dāng)前位置2 文件末尾6.1.4文本文件的寫入1. fwrite()函數(shù)可以將一個(gè)字符串寫入到文本文件中 int fwrite( resource handle, string string , int length) 文本文件的追加寫入 如果希望在寫入后再讀取文件中的內(nèi)容,可以采用可讀寫的方式寫入 ?$fp=fopen(new.txt,w+);fwrite($fp,這是寫入的一行話nr);rewind($fp);$str=fread($fp,20); 追加寫入2. file_put_

8、contents函數(shù)無(wú)須經(jīng)過(guò)打開(kāi)文件及關(guān)閉文件的操作就可將字符串寫入文件 int file_put_contents(string filename, string data, int mode)例如 讀寫文件的應(yīng)用制作計(jì)數(shù)器 1. 用文件實(shí)現(xiàn)計(jì)數(shù)器2. 對(duì)計(jì)數(shù)器設(shè)置防刷新功能3. 用文件及圖像實(shí)現(xiàn)計(jì)數(shù)器6.2 文件及目錄的基本操作6.2.1 復(fù)制、移動(dòng)和刪除文件copy()copy(源文件, 目的文件)復(fù)制文件unlink()unlink(目標(biāo)文件)刪除文件rename()rename(舊文件名, 新文件名)重命名文件或目錄,或移動(dòng)文件ftruncate()ftruncate(目標(biāo)文件資源,

9、 截取長(zhǎng)度)將文件截?cái)嗟街付ㄩL(zhǎng)度f(wàn)ile_exists()file_exists(目標(biāo)文件名)判斷文件或文件夾是否存在is_file()is_file(文件名)判斷指定的路徑存在且為文件示例程序說(shuō)明rename()函數(shù)既可重命名文件,也可移動(dòng)文件 復(fù)制、移動(dòng)文件操作都不能自動(dòng)創(chuàng)建文件夾,因此應(yīng)保證當(dāng)前目錄下data文件夾存在,才能運(yùn)行該程序 6.2.2 獲取文件屬性filesize()只讀,返回文件的大小$fsize=filesize(tang.txt)filetype()只讀,返回文件的類型,如文件或文件夾。filetype(tang.txt),返回filefilectime()返回文件創(chuàng)建

10、時(shí)間的時(shí)間戳date(Y-m-d H:i:s,filectime(6-10.php)filemtime()只讀,返回文件的修改時(shí)間realpath()返回文件的物理路徑realpath(6-10.php)pathinfo()以數(shù)組形式返回文件的路徑和文件名信息print_r(pathinfo(6-10.php)dirname()返回文件相對(duì)于當(dāng)前文件的路徑信息dirname(6-10.php),返回“.”basename()返回文件的文件名信息basename(6-10.php)示例程序?$file=tang.txt;echo 文件名: .basename($file); /echo 文件名:

11、._FILE_;$patharr=pathinfo($file);echo 文件擴(kuò)展名:.$patharrextension;echo 文件屬性: . filetype ($file);echo 路徑:. realpath($file); echo 大?。?. filesize ($file);echo 創(chuàng)建日期: . date(Y-m-d H:i:s,filectime($file) ;? 6.2.3目錄的基本操作函數(shù)名說(shuō)明示例mkdir(pathname)新建一個(gè)指定的目錄mkdir(temp)rmdir(dirname)刪除目錄,該目錄必須為空rmdir(data)getcwd(void

12、)取得當(dāng)前文件所在的目錄echo getcwd();chdir(dirname)改變當(dāng)前目錄chdir(./);opendir(path)打開(kāi)目錄,返回目錄的指針$dirh=opendir(temp)closedir()關(guān)閉目錄,參數(shù)為目錄指針closedir($dirh);readdir()遍歷目錄$file=readdir($dirh)scandir(path, sort)以數(shù)組形式遍歷目錄,sort參數(shù)可設(shè)置升序或降序排列$arr=scandir(D:App,1);print_r($arr);rewinddir()將目錄指針重置到目錄開(kāi)頭處,即倒回目錄開(kāi)頭rewinddir($dirh)

13、1. 遍歷目錄opendir()用于打開(kāi)指定的目錄,打開(kāi)成功后返回值為指向該目錄的指針。readdir()用于讀取已經(jīng)打開(kāi)的目錄,其參數(shù)為opendir返回的目錄指針。closedir()用于關(guān)閉已經(jīng)打開(kāi)的目錄,其參數(shù)為opendir返回的目錄指針,它沒(méi)有返回值。rewinddir()用于將目錄指針重新指向目錄開(kāi)頭,以便重新讀取目錄中的內(nèi)容,其參數(shù)為opendir返回的目錄指針 2. 創(chuàng)建、刪除和改變目錄創(chuàng)建目錄前先要判斷該目錄是否已存在,刪除目錄先要判斷目錄是否不存在 if(!file_exists(temp) mkdir(temp);/在當(dāng)前目錄下創(chuàng)建temp目錄else echo 該目錄

14、已存在,不能創(chuàng)建;if(file_exists(data) rmdir(data);/在當(dāng)前目錄下刪除data目錄else echo 該目錄不存在,不能刪除;echo getcwd();/輸出當(dāng)前所在目錄 3. 復(fù)制和移動(dòng)目錄PHP沒(méi)有提供這方面的內(nèi)置函數(shù) 自定義函數(shù):首先創(chuàng)建一個(gè)目標(biāo)目錄,此時(shí)該目錄為空,然后對(duì)源目錄進(jìn)行遍歷,如果遇到的是普通文件,則直接用copy函數(shù)復(fù)制到目標(biāo)目錄中,如果遍歷時(shí)遇到一個(gè)子目錄,則必須建立該目錄,再對(duì)該目錄下的文件進(jìn)行復(fù)制操作 6.2.4 統(tǒng)計(jì)目錄和磁盤大小filesize()函數(shù):計(jì)算文件的大小統(tǒng)計(jì)磁盤的大小可以使用disk_free_space()和dis

15、k_total_space() 6.3制作生成靜態(tài)頁(yè)面的新聞系統(tǒng)生成靜態(tài)HTML頁(yè)面的好處?kù)o態(tài)HTML頁(yè)面不需要服務(wù)器端進(jìn)行解釋,用戶打開(kāi)頁(yè)面的速度會(huì)快些打開(kāi)靜態(tài)頁(yè)面時(shí)Web服務(wù)器不需要訪問(wèn)數(shù)據(jù)庫(kù),減輕了對(duì)數(shù)據(jù)庫(kù)服務(wù)器訪問(wèn)的壓力;靜態(tài)HTML頁(yè)面對(duì)搜索引擎更加友好,使網(wǎng)站在搜索引擎中的排名能夠上升 生成靜態(tài)HTML頁(yè)面的原理利用fopen()方法創(chuàng)建文本文件,再用fwrite()方法向文件中寫入符合HTML格式的字符串 用戶在后臺(tái)添加一條新聞后,PHP程序一方面將這條新聞作為一條記錄添加到數(shù)據(jù)表中 ;另一方面將該條新聞根據(jù)模板頁(yè)生成一個(gè)靜態(tài)HTML文件,并存放在網(wǎng)站的相應(yīng)目錄下。 為了以后能夠

16、修改這條新聞之所以要使用模板頁(yè),是因?yàn)槿绻耆肳riteLine()方法將HTML代碼一行一行寫入到文本文件中代碼量太大 6.3.1 數(shù)據(jù)庫(kù)設(shè)計(jì) 用于存放所有新聞的news表結(jié)構(gòu) 字段名字段類型說(shuō)明idint(自動(dòng)遞增)新聞的編號(hào)titlevarchar新聞的標(biāo)題contentTEXT新聞的內(nèi)容authorvarchar發(fā)布者timedatetime發(fā)布時(shí)間bigclassvarchar新聞所屬欄目filepathvarchar新聞對(duì)應(yīng)的靜態(tài)頁(yè)面文件的路徑新聞模板頁(yè)的制作 $mtitle$ $mtitle$ 發(fā)布者:$mauthor$ $mcontent$(發(fā)布時(shí)間:$mtime$ )字段名

17、字段類型說(shuō)明idint(自動(dòng)遞增)模板的編號(hào)htmlTEXT模板的html代碼保存模板頁(yè)的moban表結(jié)構(gòu) 連接數(shù)據(jù)庫(kù)conn.php 6.3.2 新聞添加頁(yè)面和程序的制作1. 制作新聞添加的前臺(tái)頁(yè)面addnews.php替換模板頁(yè)并生成html文件的程序add.php 6.3.3 新聞后臺(tái)管理頁(yè)面的制作除了能發(fā)布新聞外,一個(gè)完整的新聞系統(tǒng)還應(yīng)具有新聞修改和新聞刪除的功能。為此,需要先制作一個(gè)新聞后臺(tái)管理頁(yè)面(admin.php),該頁(yè)面用來(lái)顯示所有新聞的列表,并能鏈接到新聞靜態(tài)頁(yè)面,還提供了“編輯”和“刪除”的鏈接供用戶執(zhí)行修改或刪除操作 6.3.4 新聞修改頁(yè)面的制作程序(editform

18、.php)一方面更新這條新聞在news表中的對(duì)應(yīng)記錄,另一方面還要重新生成同名的html文件,這樣會(huì)自動(dòng)覆蓋原來(lái)的html文件。 6.3.5 新聞刪除頁(yè)面的制作該頁(yè)面的功能也是分為兩部分,其一是將這條新聞對(duì)應(yīng)的記錄從news表中刪除;其二是刪除該新聞對(duì)應(yīng)的靜態(tài)HTML文件,這是必要的,否則瀏覽者還可以通過(guò)直接輸入html文件的URL訪問(wèn)到該新聞。 6.3.6網(wǎng)站首頁(yè)和欄目首頁(yè)的靜態(tài)化可以使用file_get_contents()函數(shù)將PHP文件的執(zhí)行結(jié)果讀入到一個(gè)字符串變量中 file_get_contents()函數(shù)的語(yǔ)法如下:string file_get_contents(string

19、$url) 6.4 利用FSO生成RSS文件利用FSO生成RSS文件 利用文件系統(tǒng)組件FSO能生成任何文本文件,包括XML文件,雖然XML文件不能直接顯示在網(wǎng)頁(yè)上,但卻能實(shí)現(xiàn)與其他網(wǎng)站之間共享數(shù)據(jù),例如RSS應(yīng)用 8.4.1 XML語(yǔ)法概述XML(eXtensible Markup Language)稱為可擴(kuò)展標(biāo)記語(yǔ)言,由W3C定義它是一種用于描述數(shù)據(jù)含義的標(biāo)記語(yǔ)言,適用于不同的應(yīng)用程序之間交換數(shù)據(jù)XML被設(shè)計(jì)用來(lái)傳輸和存儲(chǔ)數(shù)據(jù),具有良好的跨平臺(tái)性。XML的標(biāo)記不是預(yù)先定義好的,我們可以自己定義XML中的標(biāo)記,而HTML語(yǔ)言中的標(biāo)記是預(yù)先定義好的 一段XML代碼 Everyday Italia

20、n 2005 30.00 XML聲明 XML僅僅用來(lái)創(chuàng)建一種結(jié)構(gòu),存儲(chǔ)和傳輸信息,XML只是一種“材料”,而非“工具” XML文檔的基本規(guī)范 必須有XML聲明語(yǔ)句,聲明位于XML文檔的第一行 所有的XML元素必須有一個(gè)結(jié)束標(biāo)記; XML標(biāo)記是大小寫敏感的; XML文檔必須有且只有一個(gè)根元素; XML元素必須正確嵌套; 屬性值必須用引號(hào)引起來(lái); XML文檔中的注釋符和HTML文檔的注釋符相同,也是 CDATA的語(yǔ)法CDATA全稱是Character Data,中文意思是字符數(shù)據(jù)。XML解析器不會(huì)對(duì)CDATA段中的內(nèi)容做任何分析處理(CDATA段類似于HTML中的標(biāo)記)85:A 提示:“”的各個(gè)字

21、符之間不能有空格符。CDATA段中不可以嵌套另一個(gè)CDATA段6.4.2 RSS概述RSS(Really Simple Syndication,真正簡(jiǎn)單的聚合),RSS的用途 網(wǎng)站只要提供一個(gè)RSS文件,這個(gè)RSS文件中包含的信息就能供其他網(wǎng)站使用Ajax技術(shù)調(diào)用 普通用戶在RSS訂閱器中輸入RSS文件的URL地址,就可以不用打開(kāi)網(wǎng)站,也知道網(wǎng)站內(nèi)容更新了什么。 典型的RSS文件 W3Schools Home Page Free web building tutorials RSS Tutorial /rss New RSS tutorial on W3Schools XML Tutorial

22、 /xml New XML tutorial on W3Schools RSS文件的主要元素(1)rss:該元素是整個(gè)RSS文檔的根元素,并可用來(lái)聲明RSS的版本號(hào);(2)channel:它用來(lái)定義網(wǎng)站的頻道,即欄目,因此網(wǎng)站的一個(gè)欄目就對(duì)應(yīng)一個(gè)channel。(3)item:用于顯示RSS中每條新聞、文章或消息的元素。而item元素對(duì)應(yīng)一條新聞,因此一個(gè)channel標(biāo)記中可包含許多個(gè)item標(biāo)記。 channel標(biāo)記內(nèi)的元素及說(shuō)明 元素名稱說(shuō)明元素名稱說(shuō)明title頻道的名稱pubDate頻道的創(chuàng)建日期link頻道的鏈接地址lastBuildDate頻道的最后修改日期description

23、對(duì)頻道的描述信息image頻道中的圖像信息item標(biāo)記內(nèi)的元素及說(shuō)明 元素名稱說(shuō)明元素名稱說(shuō)明title新聞的標(biāo)題comments評(píng)論新聞的相關(guān)信息link新聞的鏈接地址guid新聞的唯一的標(biāo)識(shí)description新聞內(nèi)容的簡(jiǎn)單描述pubDate新聞的發(fā)布日期author編輯新聞的作者source新聞的來(lái)源category新聞的類別enclosure用于導(dǎo)入媒體文件6.4.3 用PHP直接輸出RSS文檔讀取數(shù)據(jù)庫(kù)中最新的幾條新聞?dòng)涗?,然后把記錄中相?yīng)字段的內(nèi)容分別輸出到RSS文檔的標(biāo)記下的、和等標(biāo)記中 6.4.4 用FSO組件生成靜態(tài)RSS文檔 建立一個(gè)字符串變量str,把rss文檔的頭部代碼保存到該字符串中; 創(chuàng)建記錄集,把記錄集中的字段放在rss文檔的相應(yīng)標(biāo)記中形

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論