在php程式開發中,檔案上傳是乙個使用非常普遍的功能。但在網頁上實現檔案上傳存在著一定的「危險性」,例如:某些惡意的使用者欺騙指令碼去訪問本不能訪問的檔案,或者藉此上傳一些bug或病毒,因此,在目前的網路平台上,檔案上傳這個功能雖使用非常普遍但存在限制性。
首先,我們得了解$_files系統函式:
$_files['myfile']['name'] 客戶端檔案的原名稱。
$_files['myfile']['type'] 檔案的 mime 型別,例如"image/gif"。
$_files['myfile']['size'] 已上傳檔案的大小,單位為位元組。
$_files['myfile']['tmp_name'] 儲存的臨時檔名,一般是系統預設。
$_files['myfile']['error'] 該檔案上傳相關的錯誤**。
拓展:
錯誤**:0:檔案上傳成功。
1:超過了檔案大小php.ini中。
2:超過了檔案大小max_file_size 選項指定的值。
3:檔案只有部分被上傳。
4:沒有檔案被上傳。
5:上傳檔案大小為0
所以:只有$_files['myfile']['error']>0時檔案才上傳成功,其他都是不成功
接著,我們編寫乙個
index.php
檔案,實現使用者上傳介面。詳細**如下:
1 <?php2 3 //設定字元編碼為utf-8,避免中文亂碼
4 header("content-type:text/html;charset=utf-8");
5 6 ?>
7 8
注意:
表單建立後,我們需對使用者所上傳的檔案的進行判斷並接受,因此,我們需寫乙個receive.php。詳細**如下:
1 <?php2 //設定字元編碼為utf-8,避免亂碼
3 header("content-type:text/html;charset=utf-8");
4
5 //如果上傳的檔名稱中包含中文,可能引起檔名稱亂碼問題。此時,可使用函式iconv()來轉換檔名稱的編碼
6 7 if(isset($_post['submit']))
12
13 //定義允許上傳的檔案型別和檔案大小
17 //定義上傳檔案的存放目錄,不存在則建立
18 $upload="upload";
19 if(!is_dir($upload))
22
23 //判斷上傳檔案的型別是否符合規定的模式型別
24 $arr_name=explode('.',strtolower($_files['upfile']['name']));
25 //取出檔案的副檔名
26 $extent = array_pop($arr_name);
27 if(!in_array($extent,$ext_arr))
31
32 //判斷上傳檔案的大小
33 if($_files['upfile']['size']>$size)
36
37 //修改上傳檔案的檔名 =>加密
38 $newfilename = md5(mt_rand(100,999999)).'.'.$extent;
39 40 //在php中,當瀏覽器客戶端提交過來的表單請求中包含上傳的檔案時,php會將上傳的檔案先暫時存放在臨時目錄中,執行檔案上傳。
41 if(is_uploaded_file($_files['upfile']['tmp_name']))else
47 }
48 }
49
50 ?>
須知:1)is_uploaded_file檢查tmp中是否有對應的臨時檔案,判斷檔案是否通過http post上傳的,該函式可以用於確保惡意的使用者無法欺騙指令碼去訪問本不能訪問的檔案。 2)move_uploaded_file(臨時檔案,目標位置和檔名):把臨時檔案移到目標位置,成功返回true,否則返回false二、實現多檔案上傳
原理:與單個檔案上傳大同小異,用for迴圈實現多個檔案的判斷和上傳
首先,編寫乙個
index.php
檔案,實現使用者多檔案上傳介面。詳細**如下:
1 <?php2 3 //設定字元編碼為utf-8,避免中文亂碼
4 header("content-type:text/html;charset=utf-8");
5 6 ?>
7 8
接著,建立multi_recevie.php檔案,實現對多檔案的判斷和上傳
1 <?php
2 //設定字元編碼為utf-8,避免亂碼3 header("content-type:text/html;charset=utf-8");
4 5 if(isset($_post['submit']))
11 12 //定義規定的檔案型別和大小
35 36 //新建檔名
37 $newfilename=md5(mt_rand(100,999999)).'.'.$extend;
38 39 //判斷臨時檔案是否存在,上傳的是臨時檔案,把臨時檔案轉到目標資料夾
40 if(is_uploaded_file($_files['upfile']['tmp_name'][$i]))
44 }
45 }
46 }
ps:此文章為本人上課筆記加個人理解所歸納的,若有不妥處,請各大神指教!
PHP實現多檔案上傳
php實現多檔案上傳,與單檔案上傳絕大部分是相同的,不過還是有區分的地方,主要有三點 一 前端頁面 可以出現多個檔案瀏覽按鈕,也可以設定檔案瀏覽按鈕可以選擇多個檔案。需要注意的是檔案瀏覽按鈕的名字是陣列,因為要求上傳多個檔案。二 如果上傳的是多個檔案,通過 files獲得的陣列是三維陣列 如果上傳的...
PHP實現多檔案上傳
php檔案上傳流程 單擊提交按鈕,瀏覽器使用者將包含上傳檔案的表單資料提交給php處理程式 web伺服器和php預處理器首先判斷表單資料的大小是否超過php.ini配置檔案中的post max size選項設定的上限值。若超過,php處理程式將無法得到任何表單資料,此時不僅上傳檔案失敗,而且表單控制...
PHP實現多檔案上傳
charset utf 8 檔案上傳title head style color white background color 525d76 font size 22px text align center 檔案上傳h1 action upload.php method post enctype m...