$_FILES參數詳解及簡單
表單無刷新上傳文件


  $_FILES:經由 HTTP POST 文件上傳而提交至腳本的變量,類似於舊數組$HTTP_POST_FILES 數組(依然有效,但反對使用)詳細信息可參閱 POST方法上傳

$_FILES數組內容如下:

  $_FILES['myFile']['name']     客戶端文件的原名稱       

  $_FILES['myFile']['type']       文件的 MIME類型,需要瀏覽器提供該信息的支持,例如"image/gif"       

  $_FILES['myFile']['size']        已上傳文件的大小,單位為字節       

  $_FILES['myFile']['tmp_name']   文件被上傳后在服務端儲存的臨時文件名,一般是系統默認,可以在php.ini的upload_tmp_dir指定,但用 putenv() 函數設置是不起作用的     

  $_FILES['myFile']['error']             和該文件上傳相關的錯誤代碼,['error'] 是在 PHP 4.2.0版本中增加的,下面是它的說明:(它們在PHP3.0以后成了常量)

  UPLOAD_ERR_OK       值:0; 沒有錯誤發生,文件上傳成功

  UPLOAD_ERR_INI_SIZE     值:1; 上傳的文件超過了 php.ini 中 upload_max_filesize選項限制的值           

  UPLOAD_ERR_FORM_SIZE     值:2;上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值       

  UPLOAD_ERR_PARTIAL          值:3; 文件只有部分被上傳                 

  UPLOAD_ERR_NO_FILE          值:4;沒有文件被上傳, 值:5; 上傳文件大小為0                     

注:

  1. 文件被上傳結束后,默認地被存儲在了臨時目錄中,這時必須將它從臨時目錄中刪除或移動到其它地方,如果沒有,則會被刪除。也就是不管是否上傳成功,腳本執行完后臨時目錄里的文件肯定會被刪除。所以在刪除之前要用PHP的copy() 函數將它復制到其它位置,此時,才算完成了上傳文件過程。

  2. 在 PHP 4.1.0 版本以前該數組的名稱為 $HTTP_POST_FILES,它並不像$_FILES 一樣是自動全局變量。PHP 3 不支持 $HTTP_POST_FILES數組。

  3. 用form上傳文件時,一定要加上屬性內容enctype="multipart/form-data",否則用$_FILES[filename]獲取文件信息時會報異常。

官方錯誤提示代碼:

 1 <?php
 2 
 3 class UploadException extends Exception
 4 {
 5     public function __construct($code) {
 6         $message = $this->codeToMessage($code);
 7         parent::__construct($message, $code);
 8     }
 9 
10     private function codeToMessage($code)
11     {
12         switch ($code) {
13             case UPLOAD_ERR_INI_SIZE:
14                 $message = "The uploaded file exceeds the upload_max_filesize directive in php.ini";
15                 break;
16             case UPLOAD_ERR_FORM_SIZE:
17                 $message = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form";
18                 break;
19             case UPLOAD_ERR_PARTIAL:
20                 $message = "The uploaded file was only partially uploaded";
21                 break;
22             case UPLOAD_ERR_NO_FILE:
23                 $message = "No file was uploaded";
24                 break;
25             case UPLOAD_ERR_NO_TMP_DIR:
26                 $message = "Missing a temporary folder";
27                 break;
28             case UPLOAD_ERR_CANT_WRITE:
29                 $message = "Failed to write file to disk";
30                 break;
31             case UPLOAD_ERR_EXTENSION:
32                 $message = "File upload stopped by extension";
33                 break;
34 
35             default:
36                 $message = "Unknown upload error";
37                 break;
38         }
39         return $message;
40     }
41 }
42 
43 // Use
44 if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
45 //uploading successfully done
46 } else {
47 throw new UploadException($_FILES['file']['error']);
48 }
49 ?>

 

無刷新上傳文件:

HTML部分

1 <form name="uploadFrom" id="uploadFrom" action="gtEditUpfile.php" method="post"  target="tarframe" enctype="multipart/form-data">
2   上傳文件:<inputclass="upload_file" type="file" name="upfile">
3 </form>
4 <iframe src=""  width="0" height="0" style="display:none;" name="tarframe"></iframe>
5 <span id="lResult"></span>

JS部分

1 $(function(){
2      $(".upload_file").change(function(){
3          $("#uploadFrom").submit();
4      });
5 });
6 function stopSend(str){
7      $("#lResult").text("");
8      $("#lResult").text(str);
9 }

表單提交的接收數據頁gtEditUpfile.php

 1 <?php  //*連接數據庫
 2  $file=$_FILES['upfile'];
 3  $dir="gtfile/";//文件上傳目錄  4  $filename=$file['name'];//客戶端原文件名稱,用於數據庫保存文件名稱
 5  $file['name'] = iconv('UTF-8','GBK', $file['name']);//轉換格式,以免出現中文亂碼情況  6  //上傳目錄是否存在同名文件,避免覆蓋
 7  if(file_exists($dir.$file['name'])){
 8      echo "<script>parent.stopSend('上傳失敗!(該文件名已存在!)')</script>";//調用iframe父窗口的js 函數 
9 }else{ 10   //另外可以對上傳文件$file['size']、$file['type']分別對應文件類型、大小進行校驗 11   $sql="select*from tb_table";//查看數據庫中是否存在該文件信息,如果存在請先刪除以免數據庫中垃圾數據堆積 12   $query=mysql_query($sql); 13   if(mysql_num_rows($query)>0){ 14    echo "<script>parent.stopSend('上傳失敗!請先刪除原文件!')</script>";//調用iframe父窗口的js 函數
15   }else{ 16     //上傳文件 17     if(move_uploaded_file($file['tmp_name'],$dir.$file['name'])){ 18      $sql="SQL語句";//數據庫保存修改等數據處理 19     if(mysql_query($sql)){ 20     echo "<script>parent.stopSend('上傳成功!')</script>"; 21     }else{ 22      echo "<script>parent.stopSend('上傳成功!但數據處理失敗!')</script>"; 23      } 24     }else{ 25     echo "<script>parent.stopSend('上傳失敗!')</script>"; 26     }
27    }
28 }
29 ?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM