$_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 ?>