輕松學(xué)PHP之文件系統(tǒng).pptx_第1頁
輕松學(xué)PHP之文件系統(tǒng).pptx_第2頁
輕松學(xué)PHP之文件系統(tǒng).pptx_第3頁
輕松學(xué)PHP之文件系統(tǒng).pptx_第4頁
輕松學(xué)PHP之文件系統(tǒng).pptx_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第10章 文件系統(tǒng),文件是用來存儲(chǔ)數(shù)據(jù)的方式之一,數(shù)據(jù)還可以存儲(chǔ)在數(shù)據(jù)庫中。但是相對(duì)數(shù)據(jù)庫存儲(chǔ)來說,文件在使用上更加方便和直接。PHP對(duì)文件系有很好的支持,提供了非常多的文件系統(tǒng)操作的函數(shù)。PHP還能非常好地支持文件上傳功能。本章我們計(jì)算來學(xué)習(xí)這些知識(shí)。,10.1 文件處理,PHP提供了很多文件處理函數(shù),我們?cè)诔绦蛑型ǔ>褪钦{(diào)用這些函數(shù)來操作文件,下面我們就來系統(tǒng)地學(xué)習(xí)它們。,10.1.1 打開和關(guān)閉文件,在操作文件之前,我們首先要打開文件才可以,這是進(jìn)行數(shù)據(jù)操作的第一步。而在操作完成后,又需要將打開的文件關(guān)閉以釋放資源。,1.打開文件,PHP中使用fopen()來打開文件或者URL,如果打開

2、失敗則返回FALSE。它的語法如圖所示。 在fopen()的語法中$mode可選的參數(shù)如表所示。,1.打開文件,在fopen()的語法中$mode可選的參數(shù)如表所示。,1.打開文件,下面我們就使用fopen()來打開一個(gè)文件。為了避免對(duì)其他文件造成破壞,我們?cè)贒盤根目錄(D:)建立一個(gè)名為“test.txt”的空文件,如圖所示。 (1)演示使用fopen()打開存在的文件“test.txt”和不存在的文件“test1.txt”并判斷是否打開成功。 在示例的展示之前,我們需要在服務(wù)器主目錄(默認(rèn)XAMPP安裝盤的xampphtdocs目錄,這里為D:xampphtdocs)里創(chuàng)建一個(gè)文件“tes

3、tfile.txt”文件,如圖10.2所示。 (2)演示使用相對(duì)路徑訪問與PHP源文件同目錄下的“testfile.txt”文件。,1.打開文件,我們?cè)賮硎褂孟鄬?duì)路徑訪問一個(gè)jpg類型的文件。我們先在D盤根目錄下建立folder文件夾,在folder文件夾下建立image文件夾,在image文件夾下放入一個(gè)jpg或者其他格式的圖片文件(這里為image.jpg)。創(chuàng)建完成后它的路徑和文件名,如圖所示。 (1)演示使用相對(duì)路徑訪問image.jpg文件。 在操作文件的程序中,如果一開始打開文件就出現(xiàn)錯(cuò)誤,那么我們一般會(huì)希望程序不再向下執(zhí)行。在前面我們學(xué)習(xí)過die(),我們可以使用它來完成這個(gè)操作

4、。 (2)使用die()控制程序執(zhí)行。,2.關(guān)閉文件,在PHP中,我們使用fclose()來關(guān)閉一個(gè)打開的文件,它接受一個(gè)文件資源類型的參數(shù)。成功關(guān)閉后會(huì)返回TRUE,失敗則返回FALSE,語法如圖所示。 (1)演示使用fclose()關(guān)閉打開后的文件。,10.1.2 文件類型,在前面的小節(jié)中,我們學(xué)習(xí)了打開和關(guān)閉文件。示例中我們打開過“txt”類型的文件,也打開過“jpg”類型的文件。在PHP中也提供了判斷文件類型的函數(shù)filetype(),它可以判斷出傳入的參數(shù)是什么類型,它的語法如圖所示。,10.1.2 文件類型,filetype()會(huì)返回一個(gè)表示文件類型的字符串,如果出錯(cuò)則會(huì)返回FAL

5、SE。返回的字符串及其描述如表所示。 由于PHP是以UNIX文件系統(tǒng)為模型的,因此在Windows系統(tǒng)中我們只能獲得“file”、“dir”和“unknown”三種文件類型。,10.1.2 文件類型,在下面的示例中我們?cè)凇癉:xampphtdocs”目錄下新建兩個(gè)文件和一個(gè)文件夾以供我們測(cè)試函數(shù)。這些文件如圖所示。 (1)演示使用filetype()獲取圖中文件類型。,10.1.3 文件屬性,在進(jìn)行編程的時(shí)候,需要用到一些文件的屬性,如文件大小、問價(jià)修改時(shí)間、文件的訪問權(quán)限等信息。PHP為我們提供了表所示的函數(shù)來取得這些信息。 表中的函數(shù)均接受一個(gè)文件名或者路徑,因此我們不再詳講語法。在示例演

6、示之前我們先在服務(wù)器根目錄放入一個(gè)可執(zhí)行文件。,10.1.3 文件屬性,(1)演示使用文件屬性處理函數(shù)取得文件vim.exe的相關(guān)屬性。,10.1.3 文件屬性,除了使用這些函數(shù)分別獲得文的各種屬性之外,我們還可以使用stat()來獲取文件的大部分屬性。stat()接受一個(gè)文件名或者文件路徑的參數(shù)。該函數(shù)在文件存在的情況下返回一個(gè)數(shù)組,文件錯(cuò)誤的情況下輸出FALSE。返回的數(shù)組信息如表所示。 (1)演示使用stat()取得文件的屬性并輸出返回?cái)?shù)組的詳細(xì)信息。,10.1.4 讀寫文件,前面我們以及學(xué)習(xí)了打開和關(guān)閉文件以及獲取文件的各種屬性。但是并沒有實(shí)質(zhì)性地操作過文件。本節(jié)開始,我們就來學(xué)習(xí)文件

7、的讀寫操作。文件被打開后我們就可以讀取或者修改其內(nèi)容了。,1.從文件中讀取數(shù)據(jù),PHP提供了很多種讀取文件中數(shù)組的函數(shù)。它們不僅可以讀取整個(gè)文件的數(shù)據(jù),還可以讀取一個(gè)字符、一行字符串以及讀取任意長(zhǎng)度的字符。這些常用的函數(shù)如表所示。,1.從文件中讀取數(shù)據(jù),表中函數(shù)的語法如圖所示。,1.從文件中讀取數(shù)據(jù),表中函數(shù)的語法如圖所示。,1.從文件中讀取數(shù)據(jù),我們?cè)谶M(jìn)行這些函數(shù)的使用之前,要先在服務(wù)器根目錄建立一個(gè)文件(這里以在testfile.txt為例),并且在文件中寫入一些數(shù)據(jù)。 (1)演示使用readfile()讀取文件testfile.txt文件中的數(shù)據(jù)并輸出。 (2)演示使用file()和fi

8、le_get_contents()讀取文件testfile.txt文件中的數(shù)據(jù)并輸出。 (3)演示使用fgets()讀取文件testfile.txt文件中的數(shù)據(jù)并輸出。 (4)演示使用fgets()返回指定長(zhǎng)度的數(shù)據(jù)并輸出。 和fgets()功能和使用類似的還有fgetss()。它和fgets()的最主要區(qū)別就是它會(huì)過濾掉任何HTML和PHP標(biāo)簽。在演示示例之前我們需要先在服務(wù)器更目錄建立一個(gè)有HTML和PHP代碼的文件(這里以testhtml.php為例)。 (5)使用fgetss()讀取文件的數(shù)據(jù)并過濾HTML和PHP標(biāo)簽。 (6)演示在fgetss()函數(shù)中指定不過濾的標(biāo)簽后輸出文件數(shù)據(jù)

9、。 (7)演示使用fgetc()獲取文件中的字符。 (8)演示使用fread()讀取指定長(zhǎng)度的字符。,2.向文件中寫入數(shù)據(jù),我們使用fwrite()和file_put_contents()向文件中寫入數(shù)據(jù)。fwrite()也可以被稱為fputs(),它們的用法與作用是相同的。我們來看它們的語法,如圖所示。 fwrite()和file_put_contents()在寫入成功后都會(huì)返回寫入的字節(jié)數(shù),失敗則返回FALSE。,2.向文件中寫入數(shù)據(jù),(1)演示使用fwrite()給文件testfile.txt中寫入數(shù)據(jù)。 (2)演示為不存在的文件寫入數(shù)據(jù)程序會(huì)報(bào)錯(cuò)。 需要注意的是,在示例中我們使用了錯(cuò)誤

10、控制運(yùn)算符“”隱藏了提示信息,使程序僅通過條件來判斷。如過使用不同的模式(這里為“r+”),例如“a”或者“w+”則會(huì)在文件不存在的時(shí)候創(chuàng)建文件,因此數(shù)據(jù)會(huì)寫入成功。 (3)演示使用“w+”模式打開不存在的文件并寫入數(shù)據(jù)。 我們要明白,在不同的模式下寫入數(shù)據(jù)會(huì)有不同的結(jié)果,特別是在會(huì)覆蓋內(nèi)容的模式要慎用,以免造成不必要的損失。file_put_contents()與fwrite()最大的不同是前者可以使用數(shù)組(不可為多維數(shù)組)作為寫入的數(shù)據(jù)。 (4)演示使用file_put_contents()向文件寫入數(shù)據(jù)。 (5)演示為file_put_contents()的$flags指定參數(shù)與不指定參

11、數(shù)產(chǎn)生的結(jié)果。,10.1.5 操作文件,在PHP中除了可以對(duì)文件內(nèi)容進(jìn)行讀寫操作,對(duì)文件本身也同樣可以進(jìn)行操作。例如復(fù)制文件、重命名文件以及刪除文件等操作。表列出了常用的文件操作函數(shù)。,10.1.5 操作文件,如圖所示為表中函數(shù)的語法。,10.1.5 操作文件,下面我們以一個(gè)綜合流程操作來完成學(xué)習(xí)這些函數(shù)。流程要求如圖所示。 (1)實(shí)現(xiàn)圖中的操作流程。,10.2 目錄處理,目錄是一種特殊的文件類型,通過對(duì)目錄的操作,我們可以瀏覽其中的文件。也可以對(duì)其中的文件進(jìn)行各類操作。,10.2.1 打開和關(guān)閉目錄,對(duì)目錄的操作同對(duì)普通文件的操作類似,在瀏覽之前要先打開目錄,瀏覽完畢后同樣需要關(guān)閉目錄。,1

12、.打開目錄,在PHP中我們使用opendir()來打開一個(gè)目錄,它的語法如圖所示。 opendir()執(zhí)行成功后會(huì)返回一個(gè)資源類型的目錄句柄,執(zhí)行失敗則返回FALSE。,2.關(guān)閉目錄,在PHP中我們使用closedir()來關(guān)閉一個(gè)打開的目錄,它返回一個(gè)空值,語法如圖所示。 (1)演示打開和關(guān)閉一個(gè)目錄。,10.2.2 瀏覽目錄,正確打開目錄后我們就可以瀏覽目錄內(nèi)容了。在PHP中我們使用readdir()瀏覽目錄內(nèi)容,語法如圖所示。 readdir()在成功后返回目錄中下一個(gè)文件的文件名,失敗則返回FALSE。,10.2.2 瀏覽目錄,(1)演示使用readdir()循環(huán)輸出目錄文件名。 除了

13、可以使用readdir()之外,還可以使用scandir()來瀏覽一個(gè)目錄。scandir()與readdir()的不同之處在于不需要我們顯式地打開和關(guān)閉目錄,只需將目錄作為scandir()的參數(shù)即可,它的語法如圖所示。 scandir()執(zhí)行成功則返回包含瀏覽目錄中的文件和目錄的數(shù)組,執(zhí)行失敗則返回FALSE。,10.2.2 瀏覽目錄,(1)演示使用scandir()瀏覽目錄中的文件和目錄。,10.2.3 操作目錄,目錄是一種特殊的文件,因此文件的操作對(duì)目錄操作同樣有效。但操作目錄還有一些專門的函數(shù),如表所示。,10.2.3 操作目錄,表中函數(shù)的語法如圖所示。,10.2.3 操作目錄,我們

14、同樣以通過一個(gè)綜合的示例來學(xué)習(xí)這些函數(shù),我們規(guī)定要實(shí)現(xiàn)的操作流程如圖所示。 (1)實(shí)現(xiàn)圖中所示的操作流程。 由于在程序中創(chuàng)建目錄后接著就將目錄刪除了,因此在電腦硬盤里不會(huì)看到新創(chuàng)建的文件夾,讀者可以自行將刪除的語句注釋后即可看到新建的文件夾。,10.3 文件處理的高級(jí)應(yīng)用,在PHP中,除了可以對(duì)文件進(jìn)行基本的讀寫操作以外,還可以對(duì)文件指針進(jìn)行查找、定位以及對(duì)正在讀取的文件進(jìn)行鎖定等操作。下面我們就來學(xué)習(xí)這些文件處理的高級(jí)應(yīng)用。,10.3.1 訪問遠(yuǎn)程文件,PHP支持URL格式的文件調(diào)用。實(shí)現(xiàn)這個(gè)功能只需要在php.ini中將如圖所示的選項(xiàng)設(shè)置為ON后重啟服務(wù)器即可。 當(dāng)然由于我們使用的是集成環(huán)

15、境,這個(gè)選項(xiàng)是默認(rèn)開啟的。當(dāng)然讀者最好去配置文件中確認(rèn)一次。,10.3.2 文件指針,PHP可以實(shí)現(xiàn)文件指針的定位和查詢,從而實(shí)現(xiàn)所需信息的快速查詢,常用的文件指針相關(guān)的函數(shù)如表所示。,10.3.2 文件指針,表中函數(shù)的語法如圖所示。 在圖中的函數(shù),fseek()的$whence可以有以下選項(xiàng): SEEK_SET:設(shè)定位置等于$offset字節(jié),此選項(xiàng)為默認(rèn)值。 SEEK_CUR:設(shè)定位置為當(dāng)前位置加上$offset。 SEEK_END:設(shè)定位置為文件尾加上$offset。(要移動(dòng)到文件尾之前的位置,需要給$offset傳遞一個(gè)負(fù)值。) 在開始學(xué)習(xí)這些函數(shù)之前,我們要先在磁盤中新建一個(gè)文件(這

16、里以D:xampphtdocsphp.txt為例)。 (1)演示文件指針操作函數(shù)的用法以及作用。,10.3.3 文件鎖定,在向一個(gè)文件寫入內(nèi)容的同時(shí),如過其他用戶也修改這個(gè)文件,就有可能造成寫入數(shù)據(jù)出錯(cuò)而發(fā)生信息的丟失。為了防止這種情況的發(fā)生,PHP提供了flock()來鎖定文件,以避免其他用戶同時(shí)修改,它的語法如圖所示。 flock()會(huì)在執(zhí)行成功后返回TRUE,失敗則返回FALSE。語法中的$operation()可以有如下選項(xiàng): 要取得共享鎖定(讀取的程序),將$operation設(shè)為L(zhǎng)OCK_SH。 要取得獨(dú)占鎖定(寫入的程序),將$operation設(shè)為L(zhǎng)OCK_EX。 要釋放鎖定(

17、無論共享或獨(dú)占),將$operation設(shè)為L(zhǎng)OCK_UN。 如果不希望flock()在鎖定時(shí)堵塞,將$operation設(shè)為L(zhǎng)OCK_NB。 (1)演示使用flock()鎖定文件。,10.4 文件上傳,文件上傳也是PHP文件系統(tǒng)的重要功能之一,在本小節(jié)的學(xué)習(xí)中,會(huì)涉及到非常一小部分的HTML知識(shí)。當(dāng)然讀者有HTML基礎(chǔ)最好,沒有也完全不要害怕,重點(diǎn)的知識(shí)在PHP而不是HTML。因此讀者完全不用擔(dān)心。,10.4.1 配置php.ini文件,在上傳文件之前首先要配置php.ini中的如下選項(xiàng),如圖所示。 由于我們使用的是集成環(huán)境,這些選項(xiàng)都是已經(jīng)配置好的,當(dāng)然讀者再確認(rèn)一次最好。這些選項(xiàng)的含義如

18、下: memory_limit:PHP中給一個(gè)指令分配的內(nèi)存空間,以MB為單位。 max_execution_time:PHP中執(zhí)行一條指令可以使用的最長(zhǎng)時(shí)間。 file_uploads:是否支持文件上傳。 upload_tmp_dir:上傳文件的臨時(shí)目錄。 upload_max_filesize:允許上傳文件的最大值,以MB為單位。 在配置好這些選項(xiàng)后就為文件上傳做好了基礎(chǔ)準(zhǔn)備。,10.4.2 認(rèn)識(shí)預(yù)定義變量$_FILES,$_FILES變量?jī)?chǔ)存著上傳文件的相關(guān)信息,對(duì)于上傳文件是很重要的。它是一個(gè)二維數(shù)組,它的元素名及含義如表所示。 (1)演示$_FILES結(jié)合HTML表單取得上傳文件信息。,10.4.3 單文件上傳,通過上一小節(jié)中的代碼我們以及可以取得上傳文件的信息了,那么通過這些信息再聯(lián)合move_uploaded_file()函數(shù)就可以實(shí)現(xiàn)文件上傳。move_uploaded_file()的語法如圖所示。 這里需要注意的是,$filename接受的是文件上傳時(shí)候的臨時(shí)名稱而不是文件原名稱,它可以通過$_FILES得到。這里我們以將名字為的文件上傳到D盤根目錄(D:)為例。 (1)演示將“image.jpg”文件上傳到D盤根目錄。,10.4.4 多文件上傳,前面的小節(jié)中我們成功上

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論