《PHP Web應(yīng)用開發(fā)案例教程》(阮云蘭) 第10章-PHP文件系統(tǒng)_第1頁
《PHP Web應(yīng)用開發(fā)案例教程》(阮云蘭) 第10章-PHP文件系統(tǒng)_第2頁
《PHP Web應(yīng)用開發(fā)案例教程》(阮云蘭) 第10章-PHP文件系統(tǒng)_第3頁
《PHP Web應(yīng)用開發(fā)案例教程》(阮云蘭) 第10章-PHP文件系統(tǒng)_第4頁
《PHP Web應(yīng)用開發(fā)案例教程》(阮云蘭) 第10章-PHP文件系統(tǒng)_第5頁
已閱讀5頁,還剩80頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2

3了解查看文件名稱和目錄的相關(guān)知識(shí)掌握目錄處理相關(guān)函數(shù)的應(yīng)用掌握“打開/關(guān)閉”文件和“讀取/寫入”文件的相關(guān)操作掌握文件上傳的相關(guān)知識(shí)養(yǎng)成文件備份的良好習(xí)慣,增強(qiáng)防患于未然的意識(shí)4

5查看文件和目錄10.1在程序中,與文件交互時(shí)通常需要查看文件名和其目錄。6查看文件和目錄10.1居安思危72017年,是勒索軟件在全球蔓延的一年,特別是5月全球爆發(fā)的永恒之藍(lán)勒索蠕蟲(WannaCry)和隨后在烏克蘭等地流行的Petya病毒,使人們對于勒索軟件的關(guān)注達(dá)到了空前的高度。在全球范圍內(nèi),政府、教育、醫(yī)院、能源、通信、制造業(yè)等眾多領(lǐng)域都遭受到了前所未有的損失。在勒索軟件肆虐的形勢下,安全專家建議廣大用戶養(yǎng)成備份文件的習(xí)慣,避免瀏覽危險(xiǎn)網(wǎng)站,提防陌生郵件,并保持360安全衛(wèi)士等安全軟件正常開啟,以全面防御勒索病毒。10.1.1查看文件名稱10.1.2查看文件目錄10.1.3查看文件絕對路徑8查看文件和目錄10.19查看文件名稱10.1.1使用basename()函數(shù)可以返回路徑中的文件名稱,其語法格式如下:stringbasename(string$path[,string$suffix])參數(shù)$path定義要檢查的路徑;$suffix定義文件擴(kuò)展名,為可選參數(shù),用于過濾擴(kuò)展名,如果定義了該參數(shù),則函數(shù)將過濾掉擴(kuò)展名,僅返回文件名。10(實(shí)例位置:素材與實(shí)例\example\ph10\01)【例10-1】使用basename()函數(shù)查看文件名。實(shí)例代碼如下:<?php$path="\example\ph10\01\index.html";echobasename($path)."<br>";echobasename($path,".html");?>查看文件名稱10.1.111運(yùn)行結(jié)果如圖10-1所示。查看文件名稱10.1.1圖10-1查看文件名稱12查看文件目錄10.1.2使用dirname()函數(shù)可以返回路徑中的目錄部分,其語法格式如下:stringdirname(string$path)其中$path為文件全路徑。13(實(shí)例位置:素材與實(shí)例\example\ph10\02)【例10-2】使用dirname()函數(shù)查看文件路徑。實(shí)例代碼如下:<?php$path="/example/ph10/02/index.html";echodirname($path);?>查看文件目錄10.1.214運(yùn)行結(jié)果如圖10-2所示。查看文件目錄10.1.2圖10-2查看文件目錄15查看文件絕對路徑10.1.3使用realpath()函數(shù)可以返回文件絕對路徑。該函數(shù)刪除所有符號(hào)連接(比如'/./','/../'以及多余的'/'),返回絕對路徑。若失敗,則返回false。其語法格式如下:stringrealpath(string$path)其中$path為需要檢查的文件路徑。16(實(shí)例位置:素材與實(shí)例\example\ph10\03)【例10-3】使用dirname()函數(shù)查看文件路徑。實(shí)例代碼如下:<?php$path="index.php";echorealpath($path);?>查看文件絕對路徑10.1.317運(yùn)行結(jié)果如圖10-3所示。查看文件絕對路徑10.1.3圖10-3查看文件絕對路徑

18每個(gè)文件都有一個(gè)屬于其自身的目錄。要訪問文件,首先要打開其所在目錄。對目錄的處理主要包括創(chuàng)建目錄、打開/關(guān)閉目錄,以及瀏覽目錄等。19目錄處理10.210.2.1創(chuàng)建目錄10.2.2打開/關(guān)閉目錄10.2.3瀏覽目錄10.2.4其他常用目錄操作函數(shù)20目錄處理10.2創(chuàng)建目錄10.2.121使用mkdir()函數(shù)可以創(chuàng)建目錄,若成功,則返回true,否則返回false。其語法格式如下:boolmkdir(string$path[,int$mode[,bool$recursive[,resource$context]]])其中各參數(shù)的作用如下:$path:定義要?jiǎng)?chuàng)建的目錄。$mode:定義目錄權(quán)限,默認(rèn)為0777,在Windows下會(huì)被忽略。$recursive:定義是否使用遞歸模式。$context:定義文件句柄的環(huán)境。22(實(shí)例位置:素材與實(shí)例\example\ph10\04)【例10-4】使用mkdir()函數(shù)創(chuàng)建目錄。實(shí)例代碼如下:<?phpmkdir("testing");//創(chuàng)建多級目錄,此處需要使用$recursive參數(shù)mkdir("t/e/s/t","0777",true);?>創(chuàng)建目錄10.2.123運(yùn)行結(jié)果如圖10-4所示。打開網(wǎng)頁所在根目錄,可以看到系統(tǒng)自動(dòng)創(chuàng)建了上述代碼中的目錄,如圖10-5所示。創(chuàng)建目錄10.2.1圖10-4創(chuàng)建目錄圖10-5自動(dòng)創(chuàng)建目錄24參數(shù)$path定義要打開的合法的目錄路徑,參數(shù)$context定義目錄句柄的環(huán)境。成功則返回指向該目錄的指針,失敗則返回false。如果$path不是合法目錄,或者由于許可限制或文件系統(tǒng)錯(cuò)誤而不能打開目錄,將產(chǎn)生一個(gè)E_WARNING級別的錯(cuò)誤??梢酝ㄟ^在函數(shù)名稱前面添加“@”符號(hào)來隱藏opendir()的錯(cuò)誤輸出。1打開目錄打開/關(guān)閉目錄10.2.2打開/關(guān)閉目錄使用opendir()函數(shù)和closedir()函數(shù)。如果打開的目錄不正確,將會(huì)報(bào)錯(cuò)。PHP使用opendir()函數(shù)來打開目錄,其語法格式如下:resourceopendir(string$path[,resource$context])25參數(shù)dir_handle為要關(guān)閉的目錄句柄。2關(guān)閉目錄打開/關(guān)閉目錄10.2.2PHP使用closedir()函數(shù)來關(guān)閉目錄,其語法格式如下:voidclosedir([resource$dir_handle])26(實(shí)例位置:素材與實(shí)例\example\ph10\05)【例10-5】使用opendir()和closedir()函數(shù)打開/關(guān)閉目錄。實(shí)例代碼如下:<?php$dir="D:/phpEnv/www/example/ph10/05/images/"; //打開一個(gè)目錄,然后讀取其內(nèi)容if(is_dir($dir)){ //檢測是否是一個(gè)目錄

if($dh=opendir($dir)){ //判斷打開目錄是否成功

while(($file=readdir($dh))!==false){

//循環(huán)返回目錄中下一個(gè)文件的文件名

echo"文件名為:".$file."<br>"; //輸出文件名

}}else{ echo"路徑錯(cuò)誤"; exit();}closedir($dh); //關(guān)閉目錄}?>打開/關(guān)閉目錄10.2.227運(yùn)行結(jié)果如圖10-6所示。打開/關(guān)閉目錄10.2.2圖10-6打開/關(guān)閉目錄28參數(shù)directory定義要掃描的目錄;參數(shù)sorting_order定義排列順序,默認(rèn)按字母升序排序,如設(shè)置了該參數(shù),則按降序排序;該函數(shù)返回一個(gè)數(shù)組,包含directory中的所有目錄和文件。瀏覽目錄10.2.3PHP使用scandir()函數(shù)來瀏覽目錄中的文件,其語法格式如下:arrayscandir(string$directory[,intsorting_order])29(實(shí)例位置:素材與實(shí)例\example\ph10\06)【例10-6】使用scandir()函數(shù)瀏覽目錄。實(shí)例代碼如下:<?php$dir="D:/phpEnv/www/example/ph10/05/images/";

//定義要瀏覽的目錄$a=scandir($dir); //以升序排序-默認(rèn)$b=scandir($dir,1); //以降序排序print_r($a);echo"<br>";print_r($b);?>瀏覽目錄10.2.330運(yùn)行結(jié)果如圖10-7所示。瀏覽目錄10.2.3圖10-7瀏覽目錄31其他常用目錄操作函數(shù)10.2.4可以把目錄看成是一種特殊的文件,對文件的操作函數(shù)(如重命名)多數(shù)也適用于目錄。另外也有一些特殊函數(shù)只是專門針對目錄,表10-1列舉了一些常用的目錄操作函數(shù)。函數(shù)原型說

明示

例getcwd(void)返回當(dāng)前工作目錄getcwd()rmdir($dirname)刪除指定目錄,前提是該目錄必須為空rmdir(‘temp’)chdir($directory)改變當(dāng)前的目錄為directorychdir(‘../’);readdir($handle)返回目錄中下一個(gè)文件的文件名,使用此函數(shù)時(shí),目錄必須是使用opendir()函數(shù)打開的$handle=opendir

("D:/phpEnv/www/")readdir($handle)rewinddir($handle)將指定的目錄重新指定到目錄開頭rewinddir($handle)表10-1常用的目錄操作函數(shù)

32文件處理包括打開、讀取、關(guān)閉、重寫文件等。訪問一個(gè)文件一般需要3步:打開文件、讀寫文件和關(guān)閉文件。33PHP文件處理10.310.3.1打開/關(guān)閉文件10.3.2讀取文件10.3.3在文件中寫入數(shù)據(jù)10.3.4其他常用文件操作函數(shù)34PHP文件處理10.3打開/關(guān)閉文件10.3.1351打開文件對文件執(zhí)行任何操作都需要首先將其打開,在PHP中使用fopen()函數(shù)打開文件,其語法格式如下:resourcefopen(string$filename,string$mode[,bool$use_include_path])打開/關(guān)閉文件使用fopen()和fclose()函數(shù)。參數(shù)filename是要打開的包含路徑的文件名,可以是相對路徑或絕對路徑。如果filename是“scheme://…”格式,將被看做一個(gè)URL,PHP將搜索協(xié)議處理器來處理此模式。如果filename沒有任何前綴,則表示打開的是本地文件。36參數(shù)mode定義打開文件的方式,可取值如表10-2所示。表10-2fopen()函數(shù)中參數(shù)mode的取值列表打開/關(guān)閉文件10.3.1PHP在嘗試打開文件時(shí),必須確保該文件是PHP能夠訪問的,也就是要確認(rèn)文件的訪問權(quán)限。提示取

值說

明r只讀模式——以只讀方式打開文件,文件指針位于文件頭r+讀寫模式——以讀寫方式打開文件,文件指針位于文件頭w只寫模式——以只寫方式打開文件,若文件存在,則將文件指針指向文件頭,并將文件長度清為0,即該文件內(nèi)容會(huì)消失;若文件不存在,則嘗試建立該文件w+讀寫模式——以讀寫方式打開文件,若文件存在,則將文件指針指向文件頭,并將文件長度清為零。若文件不存在,則嘗試建立該文件a以附加的方式打開只寫文件,文件指針指向文件尾。若文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾后,即文件原先的內(nèi)容會(huì)被保留;若文件不存在,則會(huì)創(chuàng)建該文件a+以附加的方式打開可讀寫的文件,文件指針指向文件尾。若文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾后,即文件原先的內(nèi)容會(huì)被保留;若文件不存在,則會(huì)創(chuàng)建該文件b二進(jìn)制模式——以二進(jìn)制模式打開文件。若文件系統(tǒng)能夠區(qū)分二進(jìn)制文件和文本文件,可能會(huì)使用它。Windows可以區(qū)分,Unix則不區(qū)分,推薦使用該選項(xiàng),便于獲得最大程度的可移植性。它是默認(rèn)模式t文本模式——用于與其他模式的結(jié)合,Unix系統(tǒng)使用“\n”作為行結(jié)束字符,Windows系統(tǒng)使用“\r\n”作為行結(jié)束字符,該模式只是Windows下的一個(gè)選項(xiàng)可選參數(shù)use_include_path的作用是,如果需要在include_path中指定的路徑下搜索文件,可將該參數(shù)設(shè)置為1或者true。打開/關(guān)閉文件10.3.1372關(guān)閉文件對文件操作結(jié)束后應(yīng)關(guān)閉文件,以釋放打開的文件資源。關(guān)閉文件使用fclose()函數(shù)。其語法格式如下:boolfclose(resource$file)參數(shù)file為已打開文件的資源對象,也就是要關(guān)閉的文件,該資源對象必須有效,否則將返回false。38(實(shí)例位置:素材與實(shí)例\example\ph10\07)【例10-7】打開/關(guān)閉文件。實(shí)例代碼如下:<?phpif(($file=fopen("test.txt","r"))===false)

//使用條件語句判斷是否打開文件失敗{ die("使用只讀方式打開文件“test.txt”失敗<br>");

//失敗則輸出語句}elseecho"使用只讀方式打開文件“test.txt”成功<br>";if(fclose($file)){ //使用條件語句判斷是否關(guān)閉文件成功

echo"文件“test.txt”關(guān)閉成功<br>"; }else echo"文件“test.txt”關(guān)閉失敗<br>";?>打開/關(guān)閉文件10.3.139運(yùn)行結(jié)果如圖10-8所示。打開/關(guān)閉文件10.3.1圖10-8打開/關(guān)閉文件讀取文件10.3.2401讀取整個(gè)文件——readfile()、file()和file_get_contents()PHP中讀取文件的方法有多個(gè),下面介紹幾個(gè)常用函數(shù)。123

readfile()函數(shù)file()函數(shù)file_get_contents函數(shù)41readfile()函數(shù)常用于讀取整個(gè)文件,并將其寫入到輸出緩沖,如出現(xiàn)錯(cuò)誤則返回false。其語法格式如下:intreadfile(string$filename[,bool$use_include_path[,resource$context]])使用readfile()函數(shù),不需要打開/關(guān)閉文件,也不需要echo,print等輸出語句,只需要給出文件路徑即可。讀取文件10.3.2readfile()函數(shù)142file()函數(shù)也可用于讀取整個(gè)文件內(nèi)容,它是將文件內(nèi)容按行讀入一個(gè)數(shù)組中,數(shù)組的每一項(xiàng)對應(yīng)文件中的一行,包括換行符在內(nèi),如出現(xiàn)錯(cuò)誤則返回false。其語法格式如下:arrayfile(string$filename[,int$flags=0[,resource$context]])使用file()函數(shù),也不需要打開/關(guān)閉文件,它將文件作為一個(gè)數(shù)組返回,如失敗則返回false。讀取文件10.3.2file()函數(shù)243file_get_contents函數(shù)也可用于讀取整個(gè)文件內(nèi)容,它是將文件讀入到一個(gè)字符串中。其語法格式如下:stringfile_get_contents(string$filename[,bool$use_include_path=false[,resource$context[,int$offset=-1[,int$maxlen]]]])該函數(shù)適用于二進(jìn)制文件,如果有offset和maxlen參數(shù),將從參數(shù)offset所指定的位置開始讀取長度為maxlen的字符串,如讀取失敗則返回false。讀取文件10.3.2file_get_contents函數(shù)344(實(shí)例位置:素材與實(shí)例\example\ph10\08)【例10-8】讀取整個(gè)文件。實(shí)例代碼如下:<?phpheader("Content-type:text/html;charset=utf-8");$file="test.txt";readfile($file); //使用readfile()函數(shù)讀取文件內(nèi)容echo"<hr>";$arr=file($file); //使用file()函數(shù)讀取文件內(nèi)容foreach($arras$m){ echo$m."<br>";}echo"<hr>";echofile_get_contents($file);

//使用file_get_contents()函數(shù)讀取文件內(nèi)容?>讀取文件10.3.245運(yùn)行結(jié)果如圖10-9所示。讀取文件10.3.2圖10-9讀取整個(gè)文件讀取文件10.3.2462讀取文件中任意長度的字符串——fread()函數(shù)在PHP中,fread()函數(shù)可用于讀取文件中任意長度的字符串。其語法格式如下:stringfread(resource$file,int$length)參數(shù)file定義要讀取的文件;參數(shù)length定義要讀取的字節(jié)數(shù)。該函數(shù)在讀取完length個(gè)字節(jié)數(shù),或到達(dá)EOF時(shí)就停止讀取文件。47(實(shí)例位置:素材與實(shí)例\example\ph10\09)【例10-9】讀取任意長度字符串。實(shí)例代碼如下:<?php$filename="test.txt";$file=fopen("test.txt","r"); //打開文件echofread($file,"18");

//使用fread()函數(shù)讀取文件內(nèi)容的前18個(gè)字節(jié)echo"<hr>";echofread($file,filesize($filename));

//使用fread()函數(shù)讀取文件的其余內(nèi)容fclose($file); //關(guān)閉文件?>讀取文件10.3.248運(yùn)行結(jié)果如圖10-10所示。讀取文件10.3.2圖10-10讀取文件中任意長度的字符串讀取文件10.3.2493讀取文件的一行字符當(dāng)文本內(nèi)容較多時(shí),可以采取逐行讀取文件的方式。使用fgets()函數(shù)可以從打開的文件中讀取一行字符。其語法格式如下:stringfgets(resource$file,int$length)該函數(shù)從file指向的文件中讀取一行,并返回長度最多為length-1字節(jié)的字符串。在碰到換行符(包括在返回值中)、EOF或者已經(jīng)讀取了length-1字節(jié)后停止。如果沒有設(shè)置參數(shù)length,則默認(rèn)為1KB,或者說1024字節(jié)。若失敗,則返回false。50(實(shí)例位置:素材與實(shí)例\example\ph10\10)【例10-10】打開文件讀取一行字符。實(shí)例代碼如下:<?php$file=fopen("test.txt","r"); //使用只讀方式打開文檔echofgets($file); //讀取打開文件的一行字符echo"<hr>";while(!feof($file))

//利用循環(huán)語句輸出文檔中的其他字符

{echofgets($file)."<br>";}fclose($file); //關(guān)閉文檔?>讀取文件10.3.251運(yùn)行結(jié)果如圖10-11所示。讀取文件10.3.2圖10-11讀取文件的一行字符讀取文件10.3.2524讀取文件的一個(gè)字符使用fgetc()函數(shù)可以從打開的文件中讀取一個(gè)字符。其語法格式如下:stringfgetc(resource$file)該函數(shù)從打開的文件中返回一個(gè)字符,遇到EOF時(shí)則返回false。53(實(shí)例位置:素材與實(shí)例\example\ph10\11)【例10-11】打開文件讀取一個(gè)字符。實(shí)例代碼如下:<?php$file=fopen("test.txt","r"); //以只讀方式打開文檔echofgetc($file);

//使用fgetc()函數(shù)讀取一個(gè)字符,并輸出echo"<hr>"; //輸出水平分割線while(!feof($file))

//使用循環(huán)語句輸出文檔中的所有字符

{echofgetc($file);}fclose($file); //關(guān)閉文檔?>讀取文件10.3.254運(yùn)行結(jié)果如圖10-12所示。讀取文件10.3.2圖10-12讀取一個(gè)字符55intfwrite(resource$handle,string$string[,int$length])在文件中寫入數(shù)據(jù),也是PHP的常用操作。使用fwrite()和file_put_contents()函數(shù)可向文件中寫入數(shù)據(jù)。fwrite()函數(shù)的語法格式如下:在文件中寫入數(shù)據(jù)10.3.3intfile_put_contents(string$filepath,mixed$data[,int$mode=0])該函數(shù)把string定義的字符串,寫入handle定義的文件指針處,如果設(shè)置了length,當(dāng)寫入length個(gè)字節(jié),或?qū)懲阺tring后,寫入就會(huì)停止。fwrite()函數(shù)返回寫入的字符數(shù),出現(xiàn)錯(cuò)誤時(shí)則返回false。file_put_contents()函數(shù)的語法格式如下:56在文件中寫入數(shù)據(jù)10.3.3參數(shù)filepath定義要寫入數(shù)據(jù)的文件。如果文件不存在,則創(chuàng)建一個(gè)新文件。參數(shù)data定義要寫入文件中的數(shù)據(jù),類型可以是字符串、數(shù)組或數(shù)據(jù)流。參數(shù)mode可選,定義如何打開/寫入文件,可能的值有FILE_USE_INCLUDE_PATH,F(xiàn)ILE_APPEND或LOCK_EX(獨(dú)占鎖定)。使用file_put_contents()函數(shù)與依次調(diào)用fopen(),fwrite()和fclose()函數(shù)所實(shí)現(xiàn)的功能一樣。57(實(shí)例位置:素材與實(shí)例\example\ph10\12)【例10-12】在文件中寫入數(shù)據(jù),并輸出。實(shí)例代碼如下:<?php $file="test1.txt";//定義要寫入數(shù)據(jù)的文檔

$str1="Loveisalamp,whilefriendshipistheshadow.";

//定義要寫入的字符串1 $str2="Whenthelampisoff,youwillfindtheshadoweverywhere."; //定義要追加的字符串2 echo"用fwrite函數(shù)寫入文件:"; $fopen=fopen($file,'w'); //以只寫方式打開文件

fwrite($fopen,$str1); //將字符串1寫入文檔

fclose($fopen); //關(guān)閉文檔

readfile($file); //讀取整個(gè)文檔內(nèi)容并輸出

echo"<p>用file_put_contents函數(shù)寫入文件:"; file_put_contents($file,$str2,FILE_APPEND);

//以追加的形式將字符串2寫入文檔

readfile($file); //讀取整個(gè)文檔內(nèi)容并輸出?>在文件中寫入數(shù)據(jù)10.3.358運(yùn)行結(jié)果如圖10-13所示。在文件中寫入數(shù)據(jù)10.3.3圖10-13將數(shù)據(jù)寫入文件59PHP除了可以對文件內(nèi)容進(jìn)行讀寫外,也可以對文件本身進(jìn)行操作,如刪除、復(fù)制、移動(dòng)和重命名文件等。常用文件操作函數(shù)如表10-3所示。其他常用文件操作函數(shù)10.3.4函數(shù)原型說

明示

例unlink($filename)刪除文件unlink(‘test.txt’)copy($source,$dest)復(fù)制文件copy("source.txt","target.txt")rename($oldname,$newname)重命名文件,如果源文件和目標(biāo)文件路徑不同,可以實(shí)現(xiàn)文件的移動(dòng)rename("images","pictures")feof($file)檢測是否已到達(dá)文件末尾$file=fopen("test.txt","r");while(!feof($file))fgetss($handle)從打開的文件中讀取一行并過濾掉HTML和PHP標(biāo)記$file=fopen("test.html","r");echofgetss($file)fileatime($filename)返回文件的上次訪問時(shí)間fileatime("test.txt")filemtime($filename)返回文件的上次修改時(shí)間filemtime("test.txt")filesize($filename)返回文件大小filesize("test.txt")arraystat($filename)以數(shù)組形式返回關(guān)于文件的信息,如文件大小、最后修改時(shí)間等$file=fopen("test.txt","r");print_r(stat($file));表10-3常用文件操作函數(shù)在讀寫文件時(shí),除file()、readfile()等少數(shù)幾個(gè)函數(shù)外,其他操作必須要先使用fopen()函數(shù)打開文件,最后用fclose()函數(shù)關(guān)閉文件。文件信息函數(shù),如filesize()、fileatime()等,則都不需要打開文件,只要文件存在即可。知識(shí)庫

6061文件上傳10.4文件上傳是Web應(yīng)用的一個(gè)常用功能,就是瀏覽者通過瀏覽器將文件上傳到服務(wù)器上的指定目錄,比如注冊用戶上傳自己的頭像圖片。10.4.1文件上傳的基本知識(shí)10.4.2預(yù)定義變量$_FILES10.4.3文件上傳函數(shù)10.4.4多文件上傳62文件上傳10.463文件上傳的基本知識(shí)10.4.1PHP可以上傳的文件類型有多種,如圖像文件、文本文件、PPT文件、音頻文件、視頻文件等。各種文件的數(shù)據(jù)格式如表10-4所示。表10-4文件MIME類型列表MIME意為多功能Internet郵件擴(kuò)展,它設(shè)計(jì)的最初目的是為了在發(fā)送電子郵件時(shí)附加多媒體數(shù)據(jù),讓郵件客戶程序能根據(jù)其類型進(jìn)行處理。然而當(dāng)它被HTTP協(xié)議支持之后,其意義就更為顯著了。它使得HTTP傳輸?shù)牟粌H是普通的文本。每個(gè)MIME類型由兩部分組成,前面是數(shù)據(jù)的大類別,例如聲音audio、圖象image等,后面定義具體的種類。知識(shí)庫文件類型MIME類型圖像文件image/gif、image/jpeg、image/jpg、image/png純文本和HTML文件text/txt、text/plain、text/htmlPPT文件application/vnd.ms-powerpoint音頻文件audio/basic視頻文件video/mpeg二進(jìn)制或數(shù)據(jù)流文件application/octet-stream1可上傳文件的類型64文件上傳的基本知識(shí)10.4.12配置php.ini文件file_uploads:如果值為on,表示服務(wù)器支持文件上傳;如果值為off,則不支持。upload_tmp_dir:上傳文件的臨時(shí)目錄,默認(rèn)為“C:\Windows\temp\”。在文件被成功上傳之前,先是被存放在服務(wù)器端的臨時(shí)目錄中。如果需要指定新位置,可通過設(shè)置該項(xiàng)來實(shí)現(xiàn)。upload_max_filesize:服務(wù)器允許上傳的文件的最大值,以MB為單位。系統(tǒng)默認(rèn)為2MB,用戶可根據(jù)需要設(shè)置合適大小。要實(shí)現(xiàn)文件上傳功能,首先需要在php.ini中開啟文件上傳,并設(shè)置其中的一些參數(shù)。首先要設(shè)置的是FileUploads項(xiàng),其中有3個(gè)常用屬性,其意義分別如下。65預(yù)定義變量$_FILES10.4.2$_FILES變量為一個(gè)二維數(shù)組,用于接收上傳文件的相關(guān)信息,有5個(gè)主要元素,具體說明如表10-5所示。表10-5預(yù)定義變量$_FILES元素說明元素名說

明$_FILES[filename][name]存儲(chǔ)上傳文件的文件名。如text.txt、snow.jpg等$_FILES[filename][size]存儲(chǔ)文件的字節(jié)大小$_FILES[filename][tmp_name]臨時(shí)文件名。文件上傳時(shí),首先以臨時(shí)文件的形式存儲(chǔ)在臨時(shí)目錄中$_FILES[filename][type]存儲(chǔ)上傳文件的類型$_FILES[filename][error]存儲(chǔ)上傳文件的結(jié)果。如果值為0,說明文件上傳成功66(實(shí)例位置:素材與實(shí)例\example\ph10\13)【例10-13】使用$_FILES變量輸出上傳文件的相關(guān)信息。實(shí)例代碼如下:<body><!--上傳文件的form表單必須有enctype屬性--><formaction=""method="post"enctype=

"multipart/form-data">

選擇照片:

<!--上傳文件域的type類型必須為file--><inputtype="file"name="zhaopian"id=

"zhaopian"size="30"/><inputtype="submit"name="tj_btn"id=

"tj_btn"value="提交"/>預(yù)定義變量$_FILES10.4.267(實(shí)例位置:素材與實(shí)例\example\ph10\13)【例10-13】使用$_FILES變量輸出上傳文件的相關(guān)信息。實(shí)例代碼如下:</form><?php if(!empty($_FILES)){//判斷變量$_FILES是否為空

foreach($_FILES['zhaopian']as$name=>$value)

//使用循環(huán)語句輸出上傳文件的相關(guān)信息

echo$name.'='.$value.'<br>'; }?></body>預(yù)定義變量$_FILES10.4.268運(yùn)行結(jié)果如圖10-14(a)所示。單擊“瀏覽”按鈕選擇要上傳的文件,之后單擊“提交”按鈕,結(jié)果如圖10-14(b)所示。預(yù)定義變量$_FILES10.4.2圖10-14應(yīng)用$_FILES變量(a)(b)表單上傳時(shí),method屬性必須為post;enctype屬性必須為"multipart/form-data"(它表示上傳二進(jìn)制數(shù)據(jù)),這樣才能完整地上傳文件數(shù)據(jù),完成上傳操作。input標(biāo)簽的type屬性必須為file,這樣服務(wù)器才會(huì)將input作為上傳文件來處理。提示69文件上傳函數(shù)10.4.3PHP中使用move_uploaded_file()函數(shù)上傳文件,該函數(shù)將存放在臨時(shí)目錄下的上傳文件拷貝出來,存放到指定目錄中,如果目標(biāo)存在,將會(huì)被覆蓋。其語法格式如下:boolmove_uploaded_file(string$filename,string$dest)該函數(shù)將上傳文件存儲(chǔ)到指定位置。如成功,則返回true,否則返回false。參數(shù)filename是上傳文件的臨時(shí)文件名,即$_FILES[filename][tmp_name];參數(shù)dest是文件上傳后保存的新路徑和名稱。70(實(shí)例位置:素材與實(shí)例\example\ph10\14)【例10-14】上傳文件。實(shí)例代碼如下:<formaction=""method="post"enctype=

"multipart/form-data">

選擇照片:

<inputtype="file"name="zhaopian"id=

"zhaopian"size="30"/><inputtype="submit"name="tj_btn"id=

"tj_btn"value="提交"/></form><?php if(!empty($_FILES['zhaopian']['name'])){

//判斷上傳文件是否存在

$fileinfo=$_FILES['zhaopian'];

//將文件信息賦給變量$fileinfo文件上傳函數(shù)10.4.371(實(shí)例位置:素材與實(shí)例\example\ph10\14)【例10-14】上傳文件。實(shí)例代碼如下:

if($fileinfo['size']<1000000&&$fileinfo['size']>0){ //判斷文件大小

move_uploaded_file($fileinfo['tmp_name'],

"upload/".$fileinfo['name']);

//上傳文件

echo'文件上傳成功'; }else{ echo'文件太大,不符合上傳要求'; } }?>文件上傳函數(shù)10.4.372運(yùn)行結(jié)果如圖10-15(a)所示。單擊“瀏覽”按鈕選擇要上傳的文件,之后單擊“提交”按鈕,結(jié)果如圖10-15(b)所示。本例必須要在文檔根目錄下創(chuàng)建一個(gè)文件夾“upload”,以放置上傳的文件。否則系統(tǒng)會(huì)報(bào)錯(cuò)。提示文件上傳函數(shù)10.4.3圖10-15上傳文件(a)(b)73多文件上傳10.4.4PHP支持同時(shí)上傳多個(gè)文件,但需要在表單中對文件上傳域使用數(shù)組形式命名,這樣,上傳的文件信息也將會(huì)自動(dòng)以數(shù)組形式組織。74(實(shí)例位置:素材與實(shí)例\example\ph10\15)【例10-15】同時(shí)上傳多個(gè)文件。實(shí)例代碼如下:<?phpif(!empty($_FILES["u_file"]["name"])){

//判斷$_FILES變量是否為空

$file_name=$_FILES["u_file"]["name"];

//將上傳文件名另存為數(shù)組

$file_tmp_name=$_FILES["u_file"]["tmp_name"];

//將上傳的臨時(shí)文件名存為數(shù)組

for($i=0;$i<count($file_name);$i++){//循環(huán)上傳文件

if($file_name[$i]!=''){ //判斷上傳文件名是否為空

move_uploaded_file($file_tmp_name[$i],

"upload/".$i.$file_name[$i]);

//上傳文件,并保存在upload文件夾下

echo'文件'.$file_name[$i].

'上傳成功。更名為'.$i.$file_name[$i].'<br>';//循環(huán)輸出上傳文件名,及其上傳后的名稱

} }}?>多文件上傳10.4.475運(yùn)行結(jié)果如圖10-16(a)所示。單擊“瀏覽”按鈕選擇要上傳的文件,之后單擊“提交”按鈕,結(jié)果如圖10-16(b)所示。本例也必須要在文檔根目錄下創(chuàng)建一個(gè)文件夾“upload”,以放置上傳的文件。提示多文件上傳10.4.4圖10-16多文件上傳(a)(b)

7677本實(shí)訓(xùn)實(shí)現(xiàn)上傳文件的功能,并要求上傳的文件格式必須為“gif”“png”或“jpg”,文件大小不能超過150k。步驟1

啟動(dòng)Dreamweaver,新建文檔“index.php”,并將其保存在“D:\phpEnv\www\exercise\ph10\01”目錄下。步驟2

在Dreamweaver中打開新建文檔,使用“代碼”視圖給該頁面設(shè)置一個(gè)標(biāo)題“上傳頭像文件”。(實(shí)例位置:素材與實(shí)例\exercise\ph10\01)步驟3

在頁面中添加一個(gè)表單,設(shè)置其屬性“action=""method="post"enctype="multipar

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論