




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、企企 業(yè)業(yè) 網(wǎng)網(wǎng) 站站 開開 發(fā)發(fā)PHP版版講師:王靖講師:王靖課課 程程 目目 標(biāo)標(biāo)第第9章章 文件系統(tǒng)與操作文件系統(tǒng)與操作9第10章 PHP交互10第11章 Cookie與Session11第12章 圖像處理12目錄與文件目錄與文件v第5章講述了數(shù)組的工作原理、訪問方法和常用函數(shù)。但是數(shù)組畢竟是存在于內(nèi)存中的,不能長久的保存供以后使用,這就要求程序員對數(shù)組以及內(nèi)存中有用的變量進(jìn)行保存。數(shù)據(jù)的保存有很多形式,通過這一章的學(xué)習(xí),就能找到其中的一種解決方案。在本章中,為了提高大家的動手能力,有些目錄或文件并沒有建立,我們可以根據(jù)系統(tǒng)提示的錯誤,找到解決的方法。 操作目錄操作目錄v目錄在文件系統(tǒng)中
2、是一個重要的概念,專業(yè)的術(shù)語把其解釋成存儲在磁盤上的文件及其他目錄的索引,也可以將其視為一個文件夾,在文件夾中,可以放置其他的文件或文件夾,從而使得計(jì)算機(jī)的文件系統(tǒng)井井有條。最頂層的目錄稱為根目錄,在PHP中用“/”或“”代表?!?”代表當(dāng)前目錄,“.”代表上級目錄。目錄操作目錄操作 打開目錄 關(guān)閉目錄 讀取目錄 遍歷目錄 創(chuàng)建目錄 刪除目錄 判斷是否是目錄判斷是否是目錄 v函數(shù)函數(shù)is_dir()用來判斷是否是目錄,其語法結(jié)構(gòu)如下:用來判斷是否是目錄,其語法結(jié)構(gòu)如下:vis_dir($path)v參數(shù)參數(shù)$path為打開目錄的路徑,如果文件名存在并且為為打開目錄的路徑,如果文件名存在并且為目
3、錄,則返回目錄,則返回 true。假設(shè)。假設(shè) file 是一個相對路徑,則按是一個相對路徑,則按照當(dāng)前工作目錄檢查其相對路徑。照當(dāng)前工作目錄檢查其相對路徑。 【范例】利用函數(shù)is_dir(),判斷images是否是目錄。判斷是否是目錄判斷是否是目錄 v 判斷文件是否存在判斷文件是否存在 v在對一個文件進(jìn)行訪問之前,一般需要先判斷文件是否在對一個文件進(jìn)行訪問之前,一般需要先判斷文件是否存在,因?yàn)橛貌磺‘?dāng)?shù)姆绞皆L問一個并不存在的文件,存在,因?yàn)橛貌磺‘?dāng)?shù)姆绞皆L問一個并不存在的文件,就會導(dǎo)致錯誤。在就會導(dǎo)致錯誤。在PHP中,中,file_exists()函數(shù)能夠檢查函數(shù)能夠檢查文件是否存在,其結(jié)構(gòu)形
4、式如下:文件是否存在,其結(jié)構(gòu)形式如下:vfile_exists($string)。v參數(shù)參數(shù)$string為一個指向文件或目錄的字符型變量,如為一個指向文件或目錄的字符型變量,如果文件或目錄存在,則返回值果文件或目錄存在,則返回值true,反之返回,反之返回false。 【范例】如果網(wǎng)頁需要調(diào)用php.txt,首先判斷文件是否存在。如果不存在,發(fā)出警告“指定的文件不存在”,如果存在,輸出“可以調(diào)用文件”。 打開目錄打開目錄 v函數(shù)函數(shù)opendir()用來打開一個目錄,其語法結(jié)構(gòu)如下:用來打開一個目錄,其語法結(jié)構(gòu)如下:vopendir(string $path)v參數(shù)參數(shù)$path為打開目錄的
5、路徑,函數(shù)將返回一個打開目為打開目錄的路徑,函數(shù)將返回一個打開目錄的句柄,用于存儲當(dāng)前的目錄資源,打開目錄前像打錄的句柄,用于存儲當(dāng)前的目錄資源,打開目錄前像打開文件一樣,要先檢測目錄是否存在,如果打開一個不開文件一樣,要先檢測目錄是否存在,如果打開一個不存在的目錄,程序?qū)⒊鲥e。存在的目錄,程序?qū)⒊鲥e。 【范例】利用函數(shù)opendir(),打開D盤下的images目錄。打開目錄打開目錄v關(guān)閉目錄關(guān)閉目錄 v關(guān)閉目錄利用函數(shù)關(guān)閉目錄利用函數(shù)closedir(),其語法結(jié)構(gòu)為:,其語法結(jié)構(gòu)為:vclosedir($dp)v參數(shù)參數(shù)dp為使用函數(shù)為使用函數(shù)opendir()打開的目錄返回的資源對打開
6、的目錄返回的資源對象。象。 打開目錄失敗時(shí)釋放資源打開目錄失敗時(shí)釋放資源v 讀取目錄讀取目錄 v在在PHP中使用中使用readdir()函數(shù)讀取目錄中的文件并返回文函數(shù)讀取目錄中的文件并返回文件名,其語法結(jié)構(gòu)如下:件名,其語法結(jié)構(gòu)如下:vreaddir($dp)v參數(shù)參數(shù)dp為使用函數(shù)為使用函數(shù)opendir()打開的目錄返回的資源對打開的目錄返回的資源對象,函數(shù)返回目錄下的文件名。下面通過示例講解讀取象,函數(shù)返回目錄下的文件名。下面通過示例講解讀取目錄的方法。目錄的方法。 【范例】利用函數(shù)opendir(),打開D盤下的images目錄,并讀取其下面的文件。讀取目錄讀取目錄 v 遍歷目錄遍歷
7、目錄 v一個目錄下往往會存放很多文件,如果想查看某個目一個目錄下往往會存放很多文件,如果想查看某個目錄下存放的文件,可通過遍歷目錄,顯示目錄下的所錄下存放的文件,可通過遍歷目錄,顯示目錄下的所有文件信息。目錄就是一個典型的樹形結(jié)構(gòu),實(shí)現(xiàn)遍有文件信息。目錄就是一個典型的樹形結(jié)構(gòu),實(shí)現(xiàn)遍歷的方法很多,這里通過實(shí)例講解目錄的遍歷。歷的方法很多,這里通過實(shí)例講解目錄的遍歷?!痉独坷眠f歸實(shí)現(xiàn)遍歷D盤images文件夾下所有的文件信息。遍歷目錄遍歷目錄 v 創(chuàng)建目錄創(chuàng)建目錄 v在備份當(dāng)天數(shù)據(jù)或存放用戶注冊信息時(shí),經(jīng)常需要創(chuàng)建在備份當(dāng)天數(shù)據(jù)或存放用戶注冊信息時(shí),經(jīng)常需要創(chuàng)建目錄,目錄,mkdir()函數(shù)
8、可以實(shí)現(xiàn)目錄的創(chuàng)建,其結(jié)構(gòu)形式函數(shù)可以實(shí)現(xiàn)目錄的創(chuàng)建,其結(jié)構(gòu)形式如下:如下:vmkdir(string $dirname,int $mode)v參數(shù)參數(shù)$dirname為字符變量,內(nèi)容為想要創(chuàng)建目錄的名為字符變量,內(nèi)容為想要創(chuàng)建目錄的名稱。參數(shù)稱。參數(shù)$mode為整型變量,默認(rèn)是為整型變量,默認(rèn)是 0777,表示創(chuàng)建模表示創(chuàng)建模式式,執(zhí)行此函數(shù)將在指定目錄下創(chuàng)建新的目錄執(zhí)行此函數(shù)將在指定目錄下創(chuàng)建新的目錄,mode 在在 Windows 下被忽略下被忽略 。 新建目錄新建目錄v【范例】 在chengxu文件夾內(nèi)創(chuàng)建存放照片的文件夾pic。 刪除目錄刪除目錄 vPHP提供一個提供一個rmdir(
9、)函數(shù)可以用來刪除目錄,其結(jié)構(gòu)函數(shù)可以用來刪除目錄,其結(jié)構(gòu)形式如下:形式如下:vrmdir(string $dirname)v參數(shù)參數(shù)$dirname為字符變量,為要刪除目錄的名稱。為字符變量,為要刪除目錄的名稱。【范例】刪除D盤images的目錄。 刪除目錄刪除目錄v v 刪除目錄要注意的問題:v 以上代碼嘗試刪除根目錄下名為“temp的目錄。v 目錄刪除成功將返回TRUE,如果刪除失敗將返回FALSE,并顯示錯誤信息,可以使用“”符號來抑制錯誤信息的輸出。取得當(dāng)前工作目錄取得當(dāng)前工作目錄v 此函數(shù)用于獲取當(dāng)前的工作目錄,通過對返回值的判斷,確定當(dāng)前操作的目錄是否正確。代碼如下所示。v v
10、獲取當(dāng)前工作目錄時(shí)要注意的問題:v 此函數(shù)運(yùn)行時(shí)將返回一個字符串,記錄當(dāng)前目錄情況。v 失敗將返回FALSE。改變當(dāng)前目錄改變當(dāng)前目錄v 回FALSE。通過操作此函數(shù),可以改變當(dāng)前目錄,以定位到可用資源,改變當(dāng)前目錄的演示代碼如下所示。v ?phpv / 顯示當(dāng)前目錄v echo getcwd() . ;v /改變當(dāng)前目錄v chdir(html);v / 顯示當(dāng)前目錄v echo getcwd().;v ?v 在使用chdir()函數(shù)時(shí),要注意以下問題:v 本例中的chdir()將當(dāng)前目錄更改為“html”。v 成功返回TRUE,失敗將返從目錄句柄中讀取條目從目錄句柄中讀取條目v 使用rea
11、ddir()函數(shù),會從目錄句柄中讀取下一個文件的文件名。配合while循環(huán)可以實(shí)現(xiàn)對目錄的遍歷,代碼如下所示。v ?php$dir = “html”;$handle = opendir($dir);if ($handle != false) echo 本目錄包含:;/* 這是正確地遍歷目錄方法 */while(false != ($file = readdir($handle)echo $file.;closedir($handle);elseecho “打開目錄錯誤!”;?列出指定路徑中的文件和目錄列出指定路徑中的文件和目錄v scandir() 函數(shù)返回一個數(shù)組,其中包含指定路徑中的文件和
12、目錄。若成功,則返回一個數(shù)組,若失敗,則返回 false。假設(shè) directory 不是目錄,則返回布爾值 false 并生成一條 E_WARNING 級的錯誤。v scandir(directory,sort,context) directory必需。規(guī)定要掃描的目錄。sort可選。規(guī)定排列順序。默認(rèn)是 0 (升序)。如果是 1,則為降序。context可選。規(guī)定目錄句柄的環(huán)境。context 是可修改目錄流的行為的一套選項(xiàng)。v 關(guān)閉目錄句柄關(guān)閉目錄句柄v 在使用完opendir()打開的目錄句柄后,應(yīng)使用closedir()進(jìn)行關(guān)閉,以節(jié)省服務(wù)器資源,代碼如下所示。v directory類
13、類v 為了方便用戶對目錄的操作,PHP提供了一個類似使用面向?qū)ο髾C(jī)制的函數(shù),它實(shí)際上相當(dāng)于使用readdir()、rewind()、closedir()三個函數(shù)實(shí)現(xiàn)遍歷目錄的功能,dir(directory) v handle.;v echo 途徑:.$dir-path.;v while(false != ($entry = $dir-read()v echo $entry.;v v $dir-close();v ?操作文件的一般方法操作文件的一般方法v上一節(jié)學(xué)習(xí)了使用相關(guān)目錄函數(shù)對目錄進(jìn)行新建、翻開、刪除、讀取及關(guān)閉等操作。在這一節(jié)中將學(xué)習(xí)操作文件的一般步驟,即:翻開、讀取、寫入、封鎖。而本
14、節(jié)很多知識與上一節(jié)是相通的,如目錄的打開與文件的打開,只不過它們使用的函數(shù)不一樣而已。訪問文件屬性訪問文件屬性在進(jìn)行處理文件之前,有時(shí)需要知道文件的一些屬性,如文件的大小、類型、修改時(shí)間、在進(jìn)行處理文件之前,有時(shí)需要知道文件的一些屬性,如文件的大小、類型、修改時(shí)間、訪問時(shí)間和文件的權(quán)限等。訪問時(shí)間和文件的權(quán)限等。PHP提供了一些函數(shù)可直接獲取文件的屬性。提供了一些函數(shù)可直接獲取文件的屬性。函函 數(shù)數(shù) 名名作作 用用參數(shù)及返回值參數(shù)及返回值filesize(string)獲取文件獲取文件的大小的大小參數(shù)參數(shù)string為一個指向文件或目錄的字符型變量。函數(shù)的返回值為整為一個指向文件或目錄的字符型
15、變量。函數(shù)的返回值為整型變量,型變量,返回文件的大小返回文件的大小。如果出錯,則返回。如果出錯,則返回false。函數(shù)參數(shù)不能為。函數(shù)參數(shù)不能為遠(yuǎn)程文件,返回結(jié)果會被緩存遠(yuǎn)程文件,返回結(jié)果會被緩存filetype(string)獲取文件獲取文件的類型的類型參數(shù)參數(shù)string為一個指向文件或目錄的字符型變量。函數(shù)的返回值為字為一個指向文件或目錄的字符型變量。函數(shù)的返回值為字符型變量,可能出現(xiàn)的值有符型變量,可能出現(xiàn)的值有fifo,char,dir,block,link,file和和unknown,返回值會被緩存,返回值會被緩存filemtime(string)獲取文件獲取文件修改的時(shí)修改的時(shí)間
16、間參數(shù)參數(shù)string為一個指向文件或目錄的字符型變量。函數(shù)的返回值為整為一個指向文件或目錄的字符型變量。函數(shù)的返回值為整型變量,型變量,返回文件的修改時(shí)間返回文件的修改時(shí)間fileatime(string)獲取文件獲取文件的訪問時(shí)的訪問時(shí)間間參數(shù)參數(shù)string為一個指向文件或目錄的字符型變量。函數(shù)的返回值為整為一個指向文件或目錄的字符型變量。函數(shù)的返回值為整型變量,內(nèi)容為型變量,內(nèi)容為文件的訪問時(shí)間文件的訪問時(shí)間fileperms(string)獲取文件獲取文件的權(quán)限的權(quán)限參數(shù)參數(shù)string為一個指向文件或目錄的字符型變量。函數(shù)的返回值為整為一個指向文件或目錄的字符型變量。函數(shù)的返回值為
17、整型變量,內(nèi)容為文件相應(yīng)的權(quán)限,同其他這一類的函數(shù)一樣,參數(shù)不型變量,內(nèi)容為文件相應(yīng)的權(quán)限,同其他這一類的函數(shù)一樣,參數(shù)不能為遠(yuǎn)程文件,另外返回結(jié)果同樣會被緩存能為遠(yuǎn)程文件,另外返回結(jié)果同樣會被緩存打開文件打開文件 v讀取文件中的數(shù)據(jù)之前,必須要先打開一個文件,這是其他文件操作的基礎(chǔ)。PHP使用fopen()函數(shù)打開一個文件,其結(jié)構(gòu)形式如下:vresource fopen (string $filename, string $mode)v其中參數(shù)filename是所要打開的文件名,可以打開本地文件,其形式為“scheme:/”。也可打開遠(yuǎn)程Web服務(wù)器上的文件,其形式為“.”。如果其形式為以“
18、ftp:/.”開頭,則其表示打開的文件是遠(yuǎn)程FTP服務(wù)器上的。參數(shù)mode是要打開文件的方式,參數(shù)$mode是可以接收的模式。代碼如下一頁表所示,其中代碼“b和代碼“t僅作用于Windows系統(tǒng)。 模模 式式說說 明明r只讀方式打開,將文件指針指向文件頭r+讀寫方式打開,將文件指針指向文件頭w只寫入方式打開,將文件指針指向文件頭并將文件大小截為0。如果文件不存在,則嘗試創(chuàng)建一個新文件w+寫入方式打開,將文件指針指向文件頭并將文件大小截為0。如果文件不存在,則嘗試創(chuàng)建一個新文件a只寫入方式打開,將文件指針指向文件末尾。如果文件不存在,則嘗試創(chuàng)建一個新文件a+寫入方式打開,將文件指針指向文件末尾。
19、如果文件不存在,則嘗試創(chuàng)建一個新文件x只創(chuàng)建和打開本地文件只用于寫入,從文件起點(diǎn)開始。如果文件已經(jīng)存在,則fopen()返回假,而且PHP發(fā)送一個警告。如果文件不存在,則創(chuàng)建它x+創(chuàng)建和打開本地文件進(jìn)行讀取和寫入,從文件起點(diǎn)開始。如果文件已經(jīng)存在,fopen()返回假,而且PHP發(fā)送一個警告。如果文件不存在,則創(chuàng)建它b默認(rèn)模式,與其他模式配合使用,用于對二進(jìn)制文件和文本文件區(qū)別對待的文件系統(tǒng)。對于Windows是必需的t與其他文件配合使用,代表Windows文本文件。把行結(jié)束符n轉(zhuǎn)換為rn。與b模式配合使用以提高可移植性vfopen()返回一個值,這個值包含一個文件句柄的整數(shù),用來向執(zhí)行文件操
20、作的函數(shù)標(biāo)識該文件。有時(shí)這個值被稱為文件指針,指針就形如內(nèi)存地址中的一個個小房間的門號。如果PHP打開文件失敗,那么這個值是false。利用常用的打開文件的方式打開本地文件和遠(yuǎn)程文件。 打開文件打開文件v 在學(xué)習(xí)打開文件之前先看一段代碼。代碼如下所示。v 讀取文件讀取文件v 文件操作中最頻繁的應(yīng)該是讀取操作,所以在讀取文件時(shí)一定要注意優(yōu)化代碼,這樣才能從代碼層面提高程序質(zhì)量。代碼里的fread(),就是基本的讀取文件函數(shù),它的原型如下所示string fread ( int $handle, int $length )v 讀取文件讀取文件v從文件中讀取 10 個字節(jié): vv讀取整個文件:v寫入
21、文件寫入文件v 寫入文件操作具有重大的意義,軟件運(yùn)行時(shí)計(jì)算出來的數(shù)據(jù),用戶提交、修改的信息,通常都需要保存下來,供以后使用。而把數(shù)據(jù)寫入文件,就是其中的解決方案之一。為了方便理解,先看一段簡單的寫入文件的程序,代碼如下所示。v v 代碼里的fwrite(),就是寫入文件函數(shù),它的原型如下所示。v int fwrite ( resource $handle, string $string , int $length )關(guān)閉文件關(guān)閉文件v關(guān)閉文件正確的說法是關(guān)閉一個已經(jīng)打開的文件句柄,fclose()只有唯一的一個參數(shù),即文件句柄。使用fopen()或fscokopen()成功打開的句柄,都可以使
22、用其來關(guān)閉。v文件的基本操作文件的基本操作v在上一節(jié)中學(xué)習(xí)了操作文件的一般步驟,以及一些基礎(chǔ)的文件系統(tǒng)函數(shù)。本節(jié)是在上節(jié)內(nèi)容的基礎(chǔ)上學(xué)習(xí)更多的文件系統(tǒng)函數(shù)及操作文件的技巧。在當(dāng)前目錄新建文件在當(dāng)前目錄新建文件v 新建文件使用的函數(shù)還是新建文件使用的函數(shù)還是fopen(),只不過是通過對,只不過是通過對fopen()的的$mode值的選值的選擇來完成。在編寫程序時(shí),很多情況下要求某個文件的存在,作為程序的運(yùn)擇來完成。在編寫程序時(shí),很多情況下要求某個文件的存在,作為程序的運(yùn)行條件,這時(shí)就可以使用下面的代碼:行條件,這時(shí)就可以使用下面的代碼:v v 使用使用fopen()函數(shù)新建文件時(shí),要注意以下幾
23、個問題:函數(shù)新建文件時(shí),要注意以下幾個問題:v 這段簡單的代碼完成了在當(dāng)前目錄新建一個名為這段簡單的代碼完成了在當(dāng)前目錄新建一個名為“model.txt文件,注意如文件,注意如果果fopen()的第一個參數(shù)是的第一個參數(shù)是“html/model.txt時(shí),程序會在當(dāng)前目錄的子目時(shí),程序會在當(dāng)前目錄的子目錄錄“html”,創(chuàng)建,創(chuàng)建“model.txt文件。文件。v 即使再短的打開文件操作,也應(yīng)該使用關(guān)閉句柄函數(shù)。即使再短的打開文件操作,也應(yīng)該使用關(guān)閉句柄函數(shù)。v 新建文件時(shí),很容易因?yàn)槲募嬖诨驒?quán)限問題而失敗,所以在新建文件前,新建文件時(shí),很容易因?yàn)槲募嬖诨驒?quán)限問題而失敗,所以在新建文件前,
24、應(yīng)進(jìn)行相關(guān)的檢查。應(yīng)進(jìn)行相關(guān)的檢查。刪除文件刪除文件v 使用unlink()函數(shù),可以刪除程序運(yùn)行時(shí)產(chǎn)生的臨時(shí)文件。unlink()函數(shù)有1個參數(shù),即要刪除文件的路徑與文件名。v 留意:使用unlink()函數(shù)刪除文件時(shí),如果刪除成功,函數(shù)將返回TRUE值,如果刪除失敗,函數(shù)將返回FALSE值。v 新建臨時(shí)文件新建臨時(shí)文件v 很多情況下,變量會被保存下來,但等程序運(yùn)行完成后,這些保存變量的文件就要被刪除以節(jié)省服務(wù)器空間。但這個過程很麻煩的,程序員要記錄過程中產(chǎn)生的文件的名稱,還要使用函數(shù)對其進(jìn)行刪除操作。而PHP為了使這一工作能夠快速有效的完成,為程序員提供了一個函數(shù),即:tmpfile()函
25、數(shù),函數(shù)的演示代碼如下所示。v 新建具有唯一文件名的文件新建具有唯一文件名的文件v tempnam()函數(shù)與tempfile()函數(shù)的使用方法都是一樣的,唯一區(qū)別的tempnam()函數(shù)將產(chǎn)生一個具有唯一文件名的文件。v 復(fù)制文件復(fù)制文件v復(fù)雜文件就是根據(jù)源文件的內(nèi)容,建立一個擁有同樣內(nèi)容的新文件。在不想破壞操作文件時(shí),可以通過復(fù)制源文件,對新產(chǎn)生的文件進(jìn)行操作。復(fù)制文件使用copy()函數(shù)實(shí)現(xiàn),演示代碼如下所示。v挪動、重命名文件或目錄挪動、重命名文件或目錄v 使用rename()函數(shù),可以移動、重新命名一個已經(jīng)存在的文件或目錄,rename(oldname,newname)函數(shù)重命名文件或
26、目錄 。v 寫入文件寫入文件v前面介紹過使用fwrite()函數(shù)寫入文件的方法,在文件系統(tǒng)函數(shù)中,還可以使用fputs()、fputcsv()、file_put_contents()函數(shù)來把內(nèi)容寫入文件。vfputs()是fwrite()函數(shù)的別名,這兩個函數(shù)的實(shí)現(xiàn)的功能是一樣的,fputcsv()函數(shù)可以把數(shù)組按指定的規(guī)則寫入文件,而file_put_contents(),可以把一個字符串直進(jìn)寫入文件。這3個函數(shù)各有特點(diǎn),在實(shí)際應(yīng)用中,就根據(jù)情況選擇使用。寫入文件寫入文件vfwrite(file,string,length)寫入文件使用寫入文件使用fwrite()函數(shù),函數(shù),其有其有3個參數(shù)
27、,第個參數(shù),第1個參數(shù)是必選參數(shù),其值是使用個參數(shù)是必選參數(shù),其值是使用fopen()函數(shù),以及類似函數(shù)打開的文件句柄。第函數(shù),以及類似函數(shù)打開的文件句柄。第2個參個參數(shù)也是必選參數(shù),其值是要寫入文件的字符串變量。第數(shù)也是必選參數(shù),其值是要寫入文件的字符串變量。第3個參數(shù)是可選參數(shù),如果指定了這個參數(shù)的值,個參數(shù)是可選參數(shù),如果指定了這個參數(shù)的值,fwrite()函數(shù)將在寫入指定長度字符串后結(jié)束運(yùn)行。函數(shù)將在寫入指定長度字符串后結(jié)束運(yùn)行。寫入文件寫入文件v將字符串寫入文件將字符串寫入文件v 使用file_put_contents()函數(shù),可以把一個字符串變量寫入文件。file_put_cont
28、ents()函數(shù)與fwrite()函數(shù)的不同之處在于,fwrite()函數(shù)需要一個fopen()或類似函數(shù)創(chuàng)建的句柄,file_put_contents()只需要運(yùn)行函數(shù)本身。v file_put_contents(file,data,mode)v file 必需。規(guī)定要寫入數(shù)據(jù)的文件。如果文件不存在,則創(chuàng)建一個新文件。 v data 可選。規(guī)定要寫入文件的數(shù)據(jù)??梢允亲址?、數(shù)組或數(shù)據(jù)流。 v mode 可選。規(guī)定如何打開/寫入文件??赡艿闹担簐 FILE_USE_INCLUDE_PATH/FILE_APPEND /LOCK_EX v 提示:運(yùn)用 FILE_APPEND 可避免刪除文件中已有
29、的內(nèi)容。v 注釋:本函數(shù)可安全用于二進(jìn)制對象。將字符串寫入文件將字符串寫入文件v v *v 文件的讀取與指針文件的讀取與指針v文件讀取函數(shù)分為兩種,一種是把文件全部讀入內(nèi)存的函數(shù),如file_get_contents()函數(shù);一種是依靠文件內(nèi)部的指針,來讀取文件內(nèi)容的函數(shù),如fread()函數(shù)。這兩種函數(shù)都有其優(yōu)缺點(diǎn),在實(shí)際應(yīng)用中,可以根據(jù)情況選擇。把整個文件讀入到數(shù)組中把整個文件讀入到數(shù)組中vfile()函數(shù)讀取文件后,返回1個數(shù)組,其中數(shù)組的每個單元對應(yīng)著文件的1行包括換符)。file()函數(shù)不僅可以讀取本地文件,還可以從網(wǎng)頁中讀取信息。vfile(path, include_path)v
30、path 必需。規(guī)定要讀取的文件。 vinclude_path 可選。如果也想在 include_path 中搜尋文件的話,可以將該參數(shù)設(shè)為 “1”。 v下面演示file()函數(shù)讀取文件的方法,把整個文件讀入到數(shù)組中把整個文件讀入到數(shù)組中v ?phpv /使用file()函數(shù)讀取html目錄下的cache.txtv $array = file(html/cache.txt);v /遍歷file()函數(shù)返回的數(shù)組v foreach($array as $line)v echo $line.;v v /使用file()函數(shù)讀取網(wǎng)頁內(nèi)容v $webPage = file(/);v /遍歷file()
31、函數(shù)返回的數(shù)組v foreach($webPage as $line)v echo $line;?將文件讀取到字符串將文件讀取到字符串使用file_get_contents()函數(shù),可以把參數(shù)指定的文件,整個讀取到1個字符串變量中清單 file_get_contents()函數(shù)讀取文件的方法 獲取、設(shè)置文件內(nèi)部指針位置獲取、設(shè)置文件內(nèi)部指針位置v文件內(nèi)部指針,是文件操作系統(tǒng)內(nèi)部的數(shù)據(jù)指針,用于標(biāo)注文件當(dāng)前的讀寫位置。使用ftell()函數(shù)可以查看當(dāng)前文件內(nèi)部指針的位置。使用fseek()函數(shù),則可以快速的把文件的內(nèi)部指針,指向參數(shù)指定的位置。vftell()函數(shù)只有1個參數(shù),其值是使用fope
32、n()或類似函數(shù)創(chuàng)建的句柄。ftell()函數(shù)運(yùn)行后,將返回當(dāng)前文件指針的位置。fseek()函數(shù)有3個參數(shù),第1個參數(shù)是必選參數(shù),其值是使用fopen()函數(shù),以及類似函數(shù)打開的文件句柄。第2個參數(shù)也是必選參數(shù),其值是數(shù)字,代表指針移動到文件處的位置。從文件指針處讀取字符從文件指針處讀取字符v使用fgetc()函數(shù),可以從當(dāng)前文件指針處,讀取一個字符并返回。下面演示fgetc()函數(shù)的使用方法,代碼如清單所示從文件指針處讀取數(shù)據(jù)從文件指針處讀取數(shù)據(jù)v使用fgets()函數(shù),可以讀取文件指針指向的當(dāng)前行,并返回一個記錄當(dāng)前行內(nèi)容的字符串。fgets()函數(shù)包括2個參數(shù),第1個參數(shù)是必選參數(shù),其
33、值是fopen()或類似函數(shù)創(chuàng)建的文件句柄,第2個參數(shù)是可選參數(shù),其值用于指定讀取文件的大小。從文件指針處讀取數(shù)據(jù)并過濾從文件指針處讀取數(shù)據(jù)并過濾HTMLv 使用fgetss()函數(shù),可以從文件指針處讀取一行數(shù)據(jù),并過濾掉文件中的HTML與PHP標(biāo)記v 重置文件指針的位置重置文件指針的位置v 使用rewind()函數(shù),可以重置當(dāng)前文件的指針位置,使指針返回到文件頭。?phpv /使用fopen()打開一個文件v $fh = fopen(config.ini,r);v echo 顯示當(dāng)前指針:.ftell($fh).;v echo 使用fseek重定位指針到100;v fseek($fh,100
34、);v echo 顯示當(dāng)前指針:.ftell($fh).;v echo 使用rewind()函數(shù)重置文件指針;v rewind($fh);v echo 顯示當(dāng)前指針:.ftell($fh).;v ?文件尾部指針測試文件尾部指針測試v 使用feof()函數(shù),可以檢查當(dāng)前文件的內(nèi)部指針,是否已經(jīng)處于文件尾部。feof()函數(shù)經(jīng)常與while()循環(huán)語句配合,實(shí)現(xiàn)讀取文件。feof()函數(shù)據(jù)的演示代碼如下所示。v 文件的上傳與下載文件的上傳與下載v文件的上傳與下載,都需要使用文件系統(tǒng)函數(shù)來完成。本節(jié)將介紹在文件上傳與下載過程中,使用到的文件系統(tǒng)函數(shù)。處理上傳文件的函數(shù)是move_uploaded_f
35、ile(),實(shí)現(xiàn)文件下載的函數(shù)是fpassthru()。處理上傳文件處理上傳文件v使用HTML產(chǎn)生上傳文件變量,產(chǎn)生上傳文件變量的表單,只能把要上傳的文件,上傳到系統(tǒng)的臨時(shí)文件夾,要想把這個臨時(shí)文件保存到指定的位置,需要使用move_uploaded_file()函數(shù)。vmove_uploaded_file(file,newloc) v第1個參數(shù)是必選參數(shù),規(guī)定要移動的文件,其值是一個合法的上傳文件名.v第2個參數(shù)是必選參數(shù),規(guī)定文件的新位置,其值是由目錄和文件名組成的字符串,代表臨時(shí)文件存儲的位置和文件名。v注釋:本函數(shù)僅用于通過 POST 上傳的文件。v留意:如果目標(biāo)文件已經(jīng)存在,將會被覆
36、蓋。讀取文件到輸出緩沖區(qū)讀取文件到輸出緩沖區(qū)v 使用readfile()函數(shù),可以讀取參數(shù)指定的文件到輸出緩沖區(qū),被輸入到緩沖區(qū)的內(nèi)容,將在瀏覽器上顯示。v 將文件輸出到緩沖區(qū)將文件輸出到緩沖區(qū)v 使用fpassthru ()函數(shù),可以把參數(shù)指向的文件,輸出到緩沖區(qū)。實(shí)現(xiàn)文件下載實(shí)現(xiàn)文件下載v 實(shí)現(xiàn)文件下載,需要兩個方面的條件:一是向?yàn)g覽器發(fā)送正確的報(bào)頭,二是把文件輸出到緩沖區(qū)。本小節(jié)使用readfile()函數(shù),來實(shí)現(xiàn)文件的下載功能文件屬性的操作文件屬性的操作v文件屬性包括文件的大小、修改時(shí)間、所有者、權(quán)限、類型等信息。通過了解文件的屬性,可以幫助程序員判斷文件現(xiàn)在的狀態(tài),對文件實(shí)現(xiàn)更細(xì)致的
37、管理。獲取文件統(tǒng)計(jì)信息獲取文件統(tǒng)計(jì)信息v 使用stat()函數(shù),可以獲取參數(shù)指向文件的統(tǒng)計(jì)信息,下面演示stat()函數(shù)的使用方法,代碼如清單所示。v 清單 stat()函數(shù)使用方法 v $value)v echo 鍵名:$key:單元值:$value;v v ?通過文件句柄獲取文件統(tǒng)計(jì)信息通過文件句柄獲取文件統(tǒng)計(jì)信息v 使用fstat()函數(shù),可以獲取文件統(tǒng)計(jì)信息。v $value)v echo 鍵名:$key:單元值:$value;v v ?獲取文件相關(guān)信息獲取文件相關(guān)信息v 雖然可以使用stat()、fstat()函數(shù),取得文件屬性,但是每次使用文件屬性時(shí),都需要對數(shù)組進(jìn)行訪問。PHP提
38、供了更加簡捷的方法,來訪問文件的某一個文件屬性。這些函數(shù)主要包括:v fileatime()函數(shù),用于取得文件的上次訪問時(shí)間。v filectime()函數(shù),用于取得文件的inode修改時(shí)間。v filegroup()函數(shù),用于取得文件的組。v fileinode()函數(shù),用于取得文件的inode。v filemtime()函數(shù),用于取得文件修改時(shí)間。v fileowner()函數(shù),取得文件的所有者。v fileperms()函數(shù),取得文件的權(quán)限。v filesize()函數(shù),取得文件大小。v filetype()函數(shù),取得文件類型。修改文件訪問和修改時(shí)間修改文件訪問和修改時(shí)間v使用touch
39、()函數(shù),可以改變指定文件的訪問和修改時(shí)間。v?phpv/定義一個存儲文件名的變量v$filename = html/conteents.txt;v/使用當(dāng)前時(shí)間,作為文件的最后訪問和修改時(shí)間vtouch($filename);vecho $filename的最后訪問時(shí)間是:.date(F d Y H:i:s., fileatime($filename);vecho $filename的修改時(shí)間是:.date(F d Y H:i:s., filemtime($filename);v/使用指定時(shí)間,作為文件的最后訪問和修改時(shí)間vtouch($filename,time()-1000);vclea
40、rstatcache();/清除文件屬性緩沖vecho $filename的最后訪問時(shí)間是:.date(F d Y H:i:s., fileatime($filename);vecho $filename的修改時(shí)間是:.date(F d Y H:i:s., filemtime($filename);v/使用指定時(shí)間,作為文件的最后訪問時(shí)間vclearstatcache();/清除文件屬性緩沖vtouch($filename,time()-2000,time()+2000);vecho $filename的最后訪問時(shí)間是:.date(F d Y H:i:s., fileatime($filena
41、me);vecho $filename的修改時(shí)間是:.date(F d Y H:i:s., filemtime($filename);v?改變文件所屬的組改變文件所屬的組v 使用chgrp()函數(shù)可以改變文件所屬的組。chgrp()函數(shù)的演示代碼如下所示。v v 留意:只有超級用戶可以任意修改文件的組。改變文件所有者改變文件所有者v 使用chown()函數(shù)可以改變文件的所有者。chown()函數(shù)的演示代碼如下所示。v v 留意:只有超級用戶可以任意修改文件的所有者。改變文件權(quán)限改變文件權(quán)限v 文件權(quán)限可以設(shè)定當(dāng)前文件,被所有者、組用戶和公共用戶訪問的權(quán)限。其值由4個八進(jìn)制數(shù)表示,第1個八進(jìn)制數(shù)
42、是0,其后每1個八進(jìn)制數(shù)由3個數(shù)字相加來表示訪問權(quán)限:1表示文件可執(zhí)行,2表示文件可寫,4表示文件可讀。v 文件權(quán)限第1個數(shù)表示所有者對文件的訪問權(quán)限,如果所有者對文件有全部訪問權(quán)限,那么其值應(yīng)該是1+2+4=7。v 文件權(quán)限第2個數(shù)表示組用戶對文件的訪問權(quán)限,如果組用戶對文件有可讀、可執(zhí)行的權(quán)限,那么其值應(yīng)該是1+4=5。v 文件權(quán)限第3個數(shù)表示公共用戶對文件的訪問權(quán)限,如果公共用戶對文件只有可讀權(quán)限,那么其值應(yīng)該是1。文件操作的錯誤處理文件操作的錯誤處理v在文件操作過程中,由于權(quán)限、途徑、文件名等不確定的因素,文件系統(tǒng)函數(shù)在操作文件時(shí),會產(chǎn)生錯誤,為了避免錯誤產(chǎn)生,應(yīng)在操作文件之前,就對文
43、件進(jìn)檢測。本節(jié)主要介紹用于文件系統(tǒng)錯誤處理的函數(shù)。判斷給定文件名是否是目錄判斷給定文件名是否是目錄v由于文件與目錄的操作函數(shù)是不能通用的,所以在不確定給定的變量是文件名或目錄的情況下,可以使用is_dir()函數(shù)進(jìn)行檢測,判斷給定文件名是否可執(zhí)行判斷給定文件名是否可執(zhí)行v 使用is_executable()函數(shù),可以檢測指定文件是否為可執(zhí)行文件,如果測試文件存在,并可以執(zhí)行,函數(shù)將返回TRUE,否則返回FALSE.v ?phpv /建立一個判斷文件是否可以執(zhí)行的函數(shù)v function isexec($file)v if(is_executable($file)v echo 文件$file可執(zhí)
44、行;v elseecho 文件$file不可執(zhí)行;v v /定義存儲文件名的變量v $file = html/contents.txt;v /使用函數(shù)判斷這些變量v isexec($file);v ?判斷給定文件名是否是文件判斷給定文件名是否是文件v使用is_file()函數(shù),可以檢測指定文件是否為文件,如果是文件函數(shù)將返回TRUE,否則返回FALSE,is_file()函數(shù)演示代碼如清單所示。判斷指定文件是否可讀判斷指定文件是否可讀v服務(wù)器端的腳本程序,訪問文件系統(tǒng)時(shí),使用的一般都是公共用戶。由于公共用戶的權(quán)限會受到一些限制,當(dāng)文件權(quán)限不確定的情況下,可以使用is_readable()函數(shù),
45、測試指定文件是否可讀。判斷文件是否是通過判斷文件是否是通過HTTP POST上傳的上傳的v使用HTML表單通過POST上傳文件時(shí),出于安全方面的考慮,可以使用is_uploaded_file()對上傳的文件進(jìn)行檢測,is_uploaded_file()有1個必選參數(shù),其值是文件上傳變量的臨時(shí)文件名。下面演示is_uploaded_file()函數(shù)的使用方法,vis_uploaded_file()函數(shù)運(yùn)行后,如果臨時(shí)文件是使用權(quán)HTTP POST方式上傳的,將返回TRUE值,否則返回FALSE值。判斷給定的文件名是否可寫判斷給定的文件名是否可寫v 當(dāng)文件權(quán)限不確定的情況下,可以使用當(dāng)文件權(quán)限不確
46、定的情況下,可以使用is_writable()函數(shù),測試指定文件是否可寫。函數(shù),測試指定文件是否可寫。v ?phpv /建立一個判斷文件名是否可寫的函數(shù)建立一個判斷文件名是否可寫的函數(shù)v function testwrite($file)v if(is_writable($file)v echo $file可寫可寫;v elseecho $file不可寫不可寫;v v /定義存儲文件名的變量定義存儲文件名的變量v $file1 = html/contents.txt;v $file1 = html/arraycontents.txt;v /使用函數(shù)判斷這些變量使用函數(shù)判斷這些變量v testw
47、rite($file1);v testwrite($file1);v ?檢查文件或目錄是否存在檢查文件或目錄是否存在v 在使用文件系統(tǒng)函數(shù)時(shí),除了權(quán)限問題可以引起錯誤外,要操作的文件或目錄是否存在,也經(jīng)常引發(fā)錯誤。在PHP中,可以使用file_exists()函數(shù),檢查指定目錄或文件是否存在。路徑與磁盤操作路徑與磁盤操作v文件系統(tǒng)函數(shù)操作文件的同時(shí),一定會涉及到對路徑的相關(guān)操作。路徑又分為相對路徑和絕對路徑,相對路徑是以操作的文件所在目錄為起點(diǎn)的路徑;絕對路徑是以當(dāng)前文件所在盤符為起點(diǎn)的路徑。本節(jié)主要介紹關(guān)于路徑和磁盤方面的函數(shù)。獲取文件路徑的信息獲取文件路徑的信息v使用pathinfo()函數(shù),可以對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZTSS 0002-2024 同山燒酒評價(jià)規(guī)范
- T-ZJSEIA 007-2024 產(chǎn)品碳足跡評價(jià)技術(shù)規(guī)范光伏組件
- 二零二五年度健康產(chǎn)業(yè)商家入駐戰(zhàn)略合作協(xié)議
- 2025年度離婚財(cái)產(chǎn)分割與子女財(cái)產(chǎn)繼承協(xié)議
- 二零二五年度個人之間房產(chǎn)交易保密協(xié)議
- 二零二五年度按揭房屋借款協(xié)議書(公積金貸款)
- 2025年度籃球運(yùn)動員轉(zhuǎn)會合同解除條件
- 二零二五年度超市租賃合同書:超市租賃及綠色環(huán)保產(chǎn)品合作協(xié)議
- 二零二五年度智能交通投資暗股協(xié)議
- 2025年度職業(yè)電競選手私教訓(xùn)練協(xié)議
- 五年級英語下冊素材-Unit1 Cinderella課文翻譯 譯林版(三起)
- 2022年南京信息職業(yè)技術(shù)學(xué)院職業(yè)適應(yīng)性測試模擬試題及答案解析
- 英語演講素材OfMiceandMen課件
- 歐洲鼻竇炎共識解讀 EPOS 2020
- 第5章 海洋資源開發(fā)與管理
- 工業(yè)氣體企業(yè)公司組織架構(gòu)圖職能部門及工作職責(zé)
- 稅收基礎(chǔ)知識考試題庫
- 1t燃?xì)庹羝仩t用戶需求(URS)(共13頁)
- 廣發(fā)證券分支機(jī)構(gòu)人員招聘登記表
- 電工每日巡查簽到表
- 機(jī)電一體化系統(tǒng)設(shè)計(jì)課件姜培剛[1]
評論
0/150
提交評論