亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP文件上傳詳解

2024-09-04 11:44:46
字體:
來源:轉載
供稿:網友

文件上傳分為兩個部分,HTML顯示部分和PHP處理部分,HTML部分主要是用來讓用戶來選擇所要上傳的文件,然后通過PHP中的$_FILES在后臺接收,然后把文件上傳到指定目錄中.

HTML部分:

實例代碼如下:

  1. <form action="upload.php" method="post" enctype="multipart/form-data"
  2. 上傳:<input type="file" name="myfile" /> 
  3. <input type="submit" name="submit" value="上傳" /> 
  4. </form> 

說明:

form標答的action="upload.php"是指點擊這個form中的submit的時候,這個上傳命令會被發送到這個叫 upload.php的頁面去處理.method="post"是指以post方式去送,enctype="multipart/form-data"屬性規定了在提交這個表單時要使用哪種內容類型,在表單需要二進制數據時,比如文件內容,請使用"multipart/form-data",如果要上傳文件,這個屬性是必要的.input中的type="file"時,規定了應該把輸入作為文件來處理,并且在input后面會有一個瀏覽的按鈕.

PHP部分:

實例代碼如下:

  1. <?php 
  2. if($_FILES['myfile']['name'] != '') { 
  3. if($_FILES['myfile']['error'] > 0) { 
  4. echo "錯誤狀態:" . $_FILES['myfile']['error']; 
  5. else { 
  6. move_uploaded_file($_FILES['myfile']['tmp_name'] , "uploads/" . 
  7. $FILES['myfile']['name']); 
  8. echo "<script>alert(上傳成功!);</script>"
  9. else
  10. echo "<script>alert(請上傳文件!);</script>"
  11. ?> 

說明:

在解釋這篇代碼前,我們有必要了解以下知識.

$_FILES['myfile']['name'] 是指被上傳文件的名稱

$_FILES['myfile']['type'] 是指被上傳文件的類型

$_FILES['myfile']['size'] 是指被上傳文件的大小,單位為字節(B)

$_FILES['myfile']['tmp_name'] 是指被上傳文件存在服務器中的臨時副本文件名稱,文件被移動到指定目錄后臨文件將被自動消毀.

$_FILES['myfile']["error"] 是指由文件上傳中有可能出現的錯誤的狀態碼,關于各狀態含義后在會說明.

首先,$_FILES['myfile']['name']中的myfile是指在上面HTML頁面中上傳文件標簽的name值,根據這個我們才能知道我們正在處理的文件是哪一個input提交過來的,然后再來判斷一下 $_FILES['myfile']['name'] 不是否為空,根據這個我們可以知道用戶有沒有上傳文件,從而執行不同的操作.如果上傳了文件并且狀態是0就說明上傳成功,我們就可以用 move_uploaded_file方法把上傳的文件存放到指定目錄,上面這個例子是指把上傳的文件移動到同目錄下的uploads文件夾下,這個路徑是相對于這個PHP文件(既upload.php)的相對目錄.比如,我們想把上傳的文件移動到upload.php上一層叫user的文件夾中的話,我們就可以這樣寫:move_uploaded_file($_FILES['myfile']['tmp_name'] , "../user/" . $FILES['myfile']['name']),這種方法使用起來很方便、靈活,這樣一個文件就被上傳到服務器中了,可以打開服務器中的目錄查看該文件. 允許用戶上傳文件是一個有巨大的安全風險的行為,因此,通常情況下,我們會對用戶上傳的文件做一些限制,如下:

實例代碼如下:

  1. <?php 
  2. if($_FILES['myfile']['name'] != '') { 
  3. if($_FILES['myfile']['error'] > 0) { 
  4. echo "錯誤狀態:" . $_FILES['myfile']['error']; 
  5. else { 
  6. if($_FILES['myfile']['type'] == 'image/jpeg' or $_FILES['myfile']['type'] == 
  7. 'image/pjpeg' or $_FILES['myfile']['type'] == 'image/gif' && 
  8. $_FILES['myfile']['size'] < 20480){ 
  9. move_uploaded_file($_FILES['myfile']['tmp_name'] , "uploads/" . 
  10. $FILES['myfile']['name']); 
  11. echo "<script>alert(上傳成功!);</script>"
  12. else { 
  13. echo "<script>alert(請上傳小于2MB的jpeg或Gif類型的附件);<script>"
  14. else { 
  15. echo "<script>alert(請上傳文件!);</script>"
  16. ?> 

從上面的代碼可以看出,我們規定了上傳的文件類型必須是jpeg或者Gif并且必須小于2MB的文件($_FILES['myfile']['size']的默認單位是字節).這里必須提到的是,對于IE瀏覽器,它識別jpg文件的類型必須是 pjpeg,而對于 FireFox,則必須是 jpeg,因此,我們必須對jpeg和pjpeg都作判斷.這樣一來,我們可以限制用戶上傳的一些危險的比如木馬或者病毒腳本,來保證了服務器的安全運行.現在,一個上傳文件程序就基本成形了.但時在有些時候,考慮到用戶體驗,我們還可以對用戶上傳過程中發生的錯誤作出一些提醒,讓用戶明白是哪里出了問題,我們會對$_FILES['myfile']['error']作出一些說明,先來看一下在PHP中對$_FILES['myfile']['error']常見6種狀態的定義.

實例代碼如下:

  1. $_FILES['teacher_pic']['error'] = 1 文件大小超過了PHP.ini中的文件限制 
  2. $_FILES['teacher_pic']['error'] = 2 文件大小超過了瀏覽器限制 
  3. $_FILES['teacher_pic']['error'] = 3 文件部分被上傳 
  4. $_FILES['teacher_pic']['error'] = 4 沒有找到要上傳的文件 
  5. $_FILES['teacher_pic']['error'] = 5 服務器臨時文件夾丟失 
  6. $_FILES['teacher_pic']['error'] = 6 文件寫入到臨時文件夾出錯 

錯誤信息狀態為1時說明上傳的文件超過了php.ini中的文件大小限制,此限制可以再php.ini中設置(Maximum allowed size for uploaded files.upload_max_filesize = 2M),這里是在第516行,這一句說定義了PHP中上傳文件的最大字節數,默認情況下是2MB,這個設置是PHP全局上傳限制,權限最高,即使$_FILES['myfile']['size']設為10MB,也只能上傳2MB以下的文件.比如,在默認情況下,如果規定$_FILES['myfile']['size'] < 10MB,在用戶上傳文件大于2MB的情況下,就會現在$_FILES['teacher_pic']['error'] = 1的情況,一般來說,我們須要把$_FILES['myfile']['size']的值設定在upload_max_filesize值之下(設大了也沒用,呵呵).當然,你完全可以把php.ini中的upload_max_filesize值調的更大,但實際應用中,我們考慮到服務器的負載能力,不建議upload_max_filesize的值超過20MB,這樣會造成網站附件增大,這在論壇社區上可以很明顯的看出來.了解了這些,我們就可以對錯誤狀態作出定義,我們再來完善一下代碼:

實例代碼如下:

  1. <?php 
  2. if($_FILES['myfile']['name'] != ''){ 
  3. if($_FILES['myfile']['error'] > 0){ 
  4. switch($_FILES['myfile']['error']){ 
  5. case 1: 
  6. echo "文件大小超過了PHP.ini中的文件限制!"
  7. break
  8. case 2: 
  9. echo "文件大小超過了瀏覽器限制!"
  10. break
  11. case 3: 
  12. echo "文件部分被上傳!"
  13. break
  14. case 4: 
  15. echo "沒有找到要上傳的文件!"
  16. break
  17. case 5: 
  18. echo "服務器臨時文件夾丟失,請重新上傳!"
  19. break
  20. case 6: 
  21. echo "文件寫入到臨時文件夾出錯!"
  22. break
  23. else { 
  24. if($_FILES['myfile']['type'] == 'image/jpeg' or $_FILES['myfile']['type'] ==  
  25. 'image/pjpeg' or $_FILES['myfile']['type'] == 'image/gif' &&  
  26. $_FILES['myfile']['size'] < 20480) { 
  27. move_uploaded_file($_FILES['myfile']['tmp_name'] , "uploads/" .  
  28. $FILES['myfile']['name']); 
  29. echo "<script>alert(上傳成功!);</script>"
  30. else { 
  31. echo "<script>alert(請上傳小于2MB的jpeg或Gif類型的附件);<script>"
  32. else { 
  33. echo "<script>alert(請上傳文件!);</script>"
  34. ?> 

我們可以使用switch語句來對6種錯狀態作出定義,這樣來下,在發生錯誤的時間,用戶就會明白,是哪里出了問題.但是還有一種情況就是,用戶上傳的文件在指定的目錄中已經存在,這里我們可以使用file_exists方法來判斷一下:

實例代碼如下:

  1. <?php 
  2. if($_FILES['myfile']['name'] != ''){ 
  3. if($_FILES['myfile']['error'] > 0){ 
  4. switch($_FILES['myfile']['error']){ 
  5. case 1: 
  6. echo "文件大小超過了PHP.ini中的文件限制!"
  7. break
  8. case 2: 
  9. echo "文件大小超過了瀏覽器限制!"
  10. break
  11. case 3: 
  12. echo "文件部分被上傳!"
  13. break
  14. case 4: 
  15. echo "沒有找到要上傳的文件!"
  16. break
  17. case 5: 
  18. echo "服務器臨時文件夾丟失,請重新上傳!"
  19. break
  20. case 6: 
  21. echo "文件寫入到臨時文件夾出錯!"
  22. break
  23. else { 
  24. if($_FILES['myfile']['type'] == 'image/jpeg' or $_FILES['myfile']['type'] ==  
  25. 'image/pjpeg' or $_FILES['myfile']['type'] == 'image/gif' &&  
  26. $_FILES['myfile']['size'] < 20480) { 
  27. if (!file_exists("uploads/" . $_FILES["myfile"]["name"])) { 
  28. move_uploaded_file($_FILES['myfile']['tmp_name'] , "uploads/" .  
  29. $FILES['myfile']['name']); 
  30. echo "<script>alert(上傳成功!);</script>"
  31. else
  32. echo "<script>alert(您上傳的文件已經存在!);</script>"
  33. else { 
  34. echo "<script>alert(請上傳小于2MB的jpeg或Gif類型的附件);<script>"
  35. else { 
  36. echo "<script>alert(請上傳文件!);</script>"
  37. ?> 

只是上傳文件最原始的方法,這樣更容易自己理解,使用時大家可以考慮把它寫成類,現在我們再來總結一下上傳中的邏輯判斷順吧.

1. 先判斷是否上傳文件

2. 如果有再來判斷上傳中是否出錯

3. 如果出錯,則提示出錯信息

4. 如查沒出錯,再判斷文件類型

5. 如果類型符合條件,再判斷指定目錄中有沒有存在該文件

6. 如果沒有就把該文件移至指定目錄

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本亚洲欧洲色α| 国产www精品| 欧美日本高清视频| 国产精品一区二区久久久久| 色在人av网站天堂精品| 欧美最猛性xxxxx亚洲精品| 国模吧一区二区| 久久久精品999| 伊人久久久久久久久久久| 亚洲激情成人网| 欧美日韩国产在线看| 精品丝袜一区二区三区| 日本精品一区二区三区在线| 欧美日韩午夜视频在线观看| 日韩中文字幕不卡视频| 亚洲一区中文字幕在线观看| 亚洲欧美日韩一区二区三区在线| 国产精品视频一区二区高潮| 国产日韩欧美一二三区| 成人情趣片在线观看免费| 亚洲人av在线影院| 精品久久久免费| 精品视频在线播放| 91成人精品网站| 日韩av男人的天堂| 青青草精品毛片| 国精产品一区一区三区有限在线| 国产精品xxxxx| 日韩在线观看网站| 国产精品主播视频| 成人久久久久爱| 菠萝蜜影院一区二区免费| 国产精品免费视频久久久| 3344国产精品免费看| 欧美中文字幕在线播放| 欧美精品videos| 欧美高清videos高潮hd| 国产精品国产福利国产秒拍| 国内免费精品永久在线视频| 热99精品里视频精品| 欧美激情一二区| 久久九九精品99国产精品| 日本一区二区在线播放| 国产精品久久一区主播| 欧美日韩亚洲精品一区二区三区| 亚洲最新av网址| 麻豆一区二区在线观看| 激情久久av一区av二区av三区| xvideos国产精品| 国产欧美一区二区三区四区| 亚洲欧美中文日韩在线v日本| 久久久久久久一| 日韩欧美中文字幕在线播放| 亚洲欧美国产日韩天堂区| 国产在线一区二区三区| 精品少妇v888av| 欧美成人精品激情在线观看| 国产啪精品视频网站| 欧美精品激情在线观看| 日韩成人激情在线| 国产日韩欧美在线观看| 精品久久久香蕉免费精品视频| 欧美日韩国产精品| 久久精品视频免费播放| 在线成人一区二区| 亚洲精品综合久久中文字幕| 久久人人爽人人爽人人片亚洲| 992tv在线成人免费观看| 在线观看国产精品日韩av| 456国产精品| 中文字幕亚洲综合| 91久久国产综合久久91精品网站| 久久久av亚洲男天堂| 久久久人成影片一区二区三区| 国内成人精品一区| 亚洲国产91精品在线观看| 精品国产鲁一鲁一区二区张丽| 96pao国产成视频永久免费| 亚洲xxxxx电影| 国产精品久久一| 亚洲高清福利视频| 欧美有码在线观看| 尤物tv国产一区| 久久夜色精品亚洲噜噜国产mv| 91精品国产99| 精品一区二区三区四区在线| 亚洲人a成www在线影院| 动漫精品一区二区| 亚洲四色影视在线观看| 国产xxx69麻豆国语对白| 精品视频中文字幕| 亚洲精品日韩在线| 亚洲自拍偷拍第一页| 欧美日韩国产成人在线| 91影院在线免费观看视频| 久久精品99久久久香蕉| 全球成人中文在线| 欧美高跟鞋交xxxxxhd| 国产精品情侣自拍| 亚洲色图35p| 日韩欧美综合在线视频| 亚洲欧美日本另类| 久久综合久久88| 精品一区二区三区四区| 亚洲国产成人精品一区二区| 国产午夜精品免费一区二区三区| 日韩中文有码在线视频| 成人激情视频小说免费下载| 久久99国产综合精品女同| 日韩精品在线观看视频| 黑人巨大精品欧美一区二区| 国产主播精品在线| 欧美日韩亚洲激情| 亚洲精品福利资源站| 欧美一级黑人aaaaaaa做受| 国产精品久久久久久影视| 欧美高清自拍一区| 亚洲人成在线电影| 久久免费精品日本久久中文字幕| 成人激情在线播放| 美日韩精品免费观看视频| 欧美专区第一页| 久久99国产精品久久久久久久久| 亚洲一区亚洲二区亚洲三区| 精品久久久香蕉免费精品视频| 激情久久av一区av二区av三区| 久久精品中文字幕电影| 91久久在线播放| 国产精品h在线观看| 久久精品99久久久久久久久| 欧美综合在线第二页| 国产视频精品va久久久久久| 日本91av在线播放| 欧美成人激情视频| 久久天天躁狠狠躁夜夜爽蜜月| 青青精品视频播放| 不卡伊人av在线播放| 亚洲国产一区二区三区在线观看| 亚洲视频自拍偷拍| 国产精品极品美女粉嫩高清在线| 欧美一级免费看| 亚洲精品欧美一区二区三区| 久久免费福利视频| 色综合久久精品亚洲国产| 亚洲欧美一区二区三区情侣bbw| 亚洲精品久久久久久下一站| 成人性教育视频在线观看| 不卡中文字幕av| 日本不卡视频在线播放| 在线观看欧美视频| 欧美成人午夜激情在线| 中文字幕视频在线免费欧美日韩综合在线看| 国产成人精品在线观看| 国产极品jizzhd欧美| 欧美性资源免费| 中文字幕精品网| 精品中文视频在线| 插插插亚洲综合网| 欧美在线精品免播放器视频| 国产精品高潮呻吟视频| 欧美日韩在线免费观看| 国产一区二区香蕉| 欧美日韩成人在线视频| 成人美女av在线直播|