PHP教程-文件上傳.ppt_第1頁
PHP教程-文件上傳.ppt_第2頁
PHP教程-文件上傳.ppt_第3頁
PHP教程-文件上傳.ppt_第4頁
PHP教程-文件上傳.ppt_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、PHP文件上傳機(jī)制,與文件系統(tǒng)和服務(wù)器的交互,文件上傳 使用目錄函數(shù) 與文件系統(tǒng)的交互 使用程序執(zhí)行函數(shù) 與環(huán)境變量交互,文件上傳,在B/S程序中文件上傳已經(jīng)成為一個常用功能。其目的是客戶可以通過瀏覽器(Browser)將文件上傳到服務(wù)器(Server)上的指定目錄。 PHP中文件上傳的基礎(chǔ)知識 表單提交 對文件的操作,何為文件上傳? 傳統(tǒng)上的HTML表單只能提交普通文本內(nèi)容或數(shù)值信息。如: 這種方法無法實現(xiàn)某些系統(tǒng)功能: 如:帶附件的電子郵件等。 為了滿足傳遞文件信息的需要:HTTP協(xié)議實現(xiàn)了文件上傳機(jī)制,從而可以將客戶端的文件通過自己的瀏覽器上傳到服務(wù)器上指定目錄存放。,HTML規(guī)范規(guī)定上

2、傳文件時表單頭必須使用 文件上傳 上傳文件:提交: ,顯示在瀏覽器上效果如下:,POST方法: 表單最常用的功能,向目標(biāo)頁面?zhèn)鬟f變量,我們在上傳文件的時候,會在表單中設(shè)置相應(yīng)的屬性,來完成文件的傳遞 注意幾個特征屬性: enctype=multipart/form-data 這樣服務(wù)器就會知道,我們要傳遞一個文件,這樣服務(wù)器可以知道上載的文件帶有常規(guī)的表單信息。 MAX_FILE_SIZE 控制最大的傳遞文件的大小(字節(jié)) ?真的可以控制嗎 設(shè)置瀏覽器瀏覽按鈕效果,MAX_FILE_SIZE的值只是對瀏覽器的一個建議,實際上可以被簡單的攻擊,我們不要對瀏覽器端的限制寄予什么希望,它只能避免君子

3、的錯誤輸入,對于普通的web工程師都會跳過瀏覽器端的限制。 但是最好還是在表單上使用MAX_FILE_SIZE,因為對于善意的錯誤我們可以幫助糾正,避免用戶花費很長的時間等待大文件上傳,傳了半天,才發(fā)現(xiàn)無法上傳。,表單提交以后,數(shù)據(jù)被發(fā)送給action的屬性指定的PHP程序,這時表單已經(jīng)完成了它的任務(wù)。 靜態(tài)表單與程序腳本之間的溝通僅僅通過action屬性,因此表單可以在任何地方被偽造,如果您的程序完全相信表單提交的數(shù)據(jù),就會被 我們在服務(wù)器端的php.ini中設(shè)置對表單傳遞的數(shù)據(jù)進(jìn)一步判斷 file_uploads = On /Off 是否允許文件上傳 upload_max_filesize

4、 = 2M 上傳的文件的最大大小 post_max_size = 8M POST 數(shù)據(jù)所允許的最大大小 表單傳遞的數(shù)據(jù),文件只是其中的一部分 所以設(shè)置時,upload_max_filesize應(yīng)該小于post_max_size,超級全局?jǐn)?shù)組$_FILES PHP程序中,需要處理的上傳數(shù)據(jù)保存在全局?jǐn)?shù)組中$_FILES(超級全局?jǐn)?shù)組) 保存$_FILES數(shù)組中的元素,將HTML表單的type=file標(biāo)記的名稱name=userfile 存放在數(shù)組中。 1:存儲在$_FILESuserfilename中的值就是: 客戶端文件系統(tǒng)的文件的名稱 2:存儲在$_FILESuserfiletype中的值

5、就是: 客戶端傳遞的文件的類型,超級全局?jǐn)?shù)組$_FILES 3:存儲在$_FILESuserfilesize中的值就是: 文件的字節(jié)的大小 4:存儲在$_FILESuserfiletmp_name中的值就是: 文件被上傳后在服務(wù)器存儲的臨時全路徑 5:存儲在$_FILESuserfileerror中的值就是: 文件上傳的錯誤代碼php 4.2以后增加的功能,存儲在$_FILESuserfileerror中的值,在$_FILESuserfileerror中返回的錯誤代碼是在PHP4.2.0版本中引入的。具體如下: 值為0:表示沒有發(fā)生任何錯誤。 值為1:表示上載文件的大小超出了約定值。文件大小的

6、最大值是在PHP配置文件中指定的,該指令是:upload_max_filesize。 值為2:表示上載文件大小超出了HTML表單的MAXFILESIZE元素所指定的最大值。 值為3:表示文件只被部分上載。 值為4:表示沒有上載任何文件。,文件上傳后的臨時存放目錄 上傳的文件被放置到服務(wù)器端臨時目錄:/tmp目錄里面命名為一個唯一的,隨機(jī)生成的臨時文件名。注:該文件在程序執(zhí)行完后將自動被刪除掉。在刪除前可以像本地文件一樣操作。 /tmp目錄是默認(rèn)的上傳臨時文件存放地點,如果需要更改這個目錄:可以編輯/etc/php.ini 文件 File Uploads 段的upload_tmp_dir 屬性值

7、。,上傳后的文件處理 使用is_uploaded_file( )函數(shù)來檢查此文件是否是上傳文件。 應(yīng)該使用move_uploaded_file( ) 函數(shù)將存放在臨時目錄下的上傳文件拷貝出來。 當(dāng)配置文件php.ini的register_globals屬性被設(shè)置成on的情況 將生成全局變量:$myfilename等,文件上傳后的處理頁面 上傳文件. 上傳文件. 0) echo 上傳錯誤: ; switch ($_FILESuserfileerror) case 1: echo 上傳文件大小超出了PHP配置文件中的約定值:upload_max_filesize; break; case 2: e

8、cho 上傳文件大小超出了表單中的約定值: max_file_size; break; case 3: echo 文件只被部分上載; break; case 4: echo 沒有上傳任何文件; break; exit; ,if ($_FILESuserfiletype != text/plain) echo 問題: 文件不是一個文本文件。; exit; $upfile = ./uploads/.$_FILESuserfilename; if (is_uploaded_file($_FILESuserfiletmp_name) /判斷是否為上傳文件 if (!move_uploaded_file

9、($_FILESuserfiletmp_name, $upfile)/移動文件 echo 問題: 不能將文件移動到指定目錄。; exit; else echo 問題: 上傳文件不是一個合法文件: ; echo $_FILESuserfilename; exit; echo 文件上傳成功!; ? ,當(dāng)需要上傳多個文件的情況,有兩種實現(xiàn)的解決方法:使用不同的表單元素使用數(shù)組格式的表單元素,使用目錄函數(shù),在用戶上載一些文件之后,能夠看到所上傳的文件,并可以操作這些文件的內(nèi)容對他們來說是非常必要的。PHP提供了一系列目錄函數(shù)與文件系統(tǒng)函數(shù),他們都是實現(xiàn)此功能的非常有用的工具。 從目錄讀?。?opend

10、ir-打開目錄句柄 resource opendir ( string path , resource context ) closedir-關(guān)閉目錄句柄 void closedir ( resource dir_handle ) readdir-從目錄句柄中讀取條目 string readdir ( resource dir_handle ), 瀏覽上傳目錄 瀏覽 上傳目錄是: $current_dir; echo 上傳列表:; while ($file = readdir($dir) echo $file; echo ; closedir($dir); ? ,創(chuàng)建和修改目錄 mkdir-新

11、建目錄 bool mkdir ( string pathname , int mode ) 如:mkdir(/path/to/my/dir, 0700); rmdir-刪除目錄 bool rmdir ( string dirname ) 注意:權(quán)限問題,有可能不成功。,13.3與文件系統(tǒng)的交互,除了能夠查看并獲得與目錄有關(guān)的信息,我們還可以獲得Web服務(wù)器上文件的信息,并且與這些文件進(jìn)行交互。前面我們已經(jīng)了解了如何讀文件和寫文件。我們還可以使用許多其他的文件函數(shù)。 獲取文件信息: 如下頁實例:文件狀態(tài)函數(shù)和他們的運行結(jié)果, 顯示上傳目錄下文件的相關(guān)屬性信息 Details of file: .

12、$file.; $file = $current_dir.$file; echo File data; echo File last accessed: .date(j F Y H:i, fileatime($file).; echo File last modified: .date(j F Y H:i, filemtime($file).; $user = posix_getpwuid(fileowner($file); echo File owner: .$username.; $group = posix_getgrgid(filegroup($file); echo File gro

13、up: .$groupname.;,echo File permissions: .decoct(fileperms($file).; echo File type: .filetype($file).; echo File size: .filesize($file). bytes; echo File tests; echo is_dir: .(is_dir($file)? true : false).; echo is_executable: .(is_executable($file)? true : false).; echo is_file: .(is_file($file)? t

14、rue : false).; echo is_link: .(is_link($file)? true : false).; echo is_readable: .(is_readable($file)? true : false).; echo is_writable: .(is_writable($file)? true : false).; ? ,使用程序執(zhí)行函數(shù),現(xiàn)在,我們要將視線從文件系統(tǒng)函數(shù)轉(zhuǎn)移到能夠運行服務(wù)器命令的函數(shù)。有4種主要的技術(shù)在Web服務(wù)器上執(zhí)行命令。這些技術(shù)都非常相似,但有微小區(qū)別。 exec( ) 函數(shù)可以將要執(zhí)行的命令作為參數(shù)。 passthru( ) 結(jié)果直接輸出顯示到瀏覽器。 System( )也是直接輸出顯示到瀏覽器,但有返回值 Bakdtichs 實際上是可執(zhí)行的超作符。結(jié)果返回。,; exec(ls -la, $result); foreach ($result as $

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論