***PHP $_FILES函數詳解 + PHP文件上傳 move_uploaded_file() 參數的正確寫法

PHP $_FILES函數詳解

在PHP中上傳一個文件建一個表單要比ASP中靈活得多。具體的看代碼。

如: 
複製代碼代碼以下:

<form enctype="multipart/form-data" action="upload.php" method="post"> 
<input type="hidden" name="MAX_FILE_SIZE" value="1000"> 
<input name="myFile" type="file"> 
<input type="submit" value="上傳文件"> 
</form> 

而後upload.php中能夠直接用 
$_FILES 
$_POST 
$_GET 
等函數獲取表單內容。 

今天咱們着重講$_FILES函數。 
當客戶端提交後,咱們得到了一個$_FILES 數組 

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

文件被上傳結束後,默認地被存儲在了臨時目錄中,這時您必須將它從臨時目錄中刪除或移動到其它地方,若是沒有,則會被刪除。也就是無論是否上傳成功,腳本執行完後臨時目錄裏的文件確定會被刪除。因此在刪除以前要用PHP的 copy() 函數將它複製到其它位置,此時,纔算完成了上傳文件過程。



PHP $_FILES中error返回值詳解

用PHP上傳文件時,咱們會用程序去監聽瀏覽器發送過來的文件信息,首先會通 過$_FILES[fieldName]['error']的不一樣數值來判斷此欲上傳的文件狀態是否正常。$_FILES[fieldName] ['error']==0表明一切正常,其它數值的具體含義請參考下面一段程序的註釋部分,若有翻譯不到之處還望指正php

$_FILES['file']['error']值 

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_NO_TMP_DIR: 6 //沒有找不到臨時文件夾 

UPLOAD_ERR_CANT_WRITE: 7 //文件寫入失敗 

UPLOAD_ERR_EXTENSION: 8 //php文件上傳擴展沒有打開 

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

數組

 

複製代碼代碼以下:

switch($_FILES[$field]['error']) {  

 

    case 1:    
        // 文件大小超出了服務器的空間大小    
        $this->setError("The file is too large (server).");    
break;   瀏覽器

case 2:    
        // 要上傳的文件大小超出瀏覽器限制    
        $this->setError("The file is too large (form).");    
        break;    

    case 3:    
        // 文件僅部分被上傳    
        $this->setError("The file was only partially uploaded.");    
        break;    

    case 4:    
        // 沒有找到要上傳的文件    
        $this->setError("No file was uploaded.");    
        break;    

    case 5:    
        // 服務器臨時文件夾丟失    
        $this->setError("The servers temporary folder is missing.");    
        break;    

    case 6:    
        // 文件寫入到臨時文件夾出錯    
        $this->setError("Failed to write to the temporary folder.");    
        break;    
}服務器


PHP文件上傳 move_uploaded_file() 參數的正確寫法

該函數的做用是把上傳的文件移動到一個新的位置。
有兩個參數,第一個參數是你上傳後的臨時文件名,由系統自動生成。一般其樣式爲:
$_FILE["file"]["tmp_name"];
其中的file爲你前臺文件上傳表單的名稱。
第二個參數就是包含有路徑的新的文件名。如:
"upload/1.jpg";
這樣,就會把你上傳的文件,移動到當前目錄下名稱upload的子目錄下,並把文件名保存爲:1.jpg。


 

php move_uploaded_file()上傳文件實例及遇到問題的解決方法

php move_uploaded_file()函數用於將HTTP POST的文件上傳到服務器,若是目標文件已經存在,將會被覆蓋。本文章向你們介紹move_uploaded_file()函數的使用方法及在使用該函數時須要注意的問題和解決方法,須要的朋友能夠參考一下。函數

php move_uploaded_file()介紹

move_uploaded_file() 函數將上傳的文件移動到新位置。若成功,則返回 true,不然返回 false。post

語法this

move_uploaded_file(filename,destination)

參數 spa

參數 描述
filename 上傳的文件的文件名。
destination 移動文件到這個位置。

本函數檢查並確保由 filename 指定的文件是合法的上傳文件。若是文件合法,則將其移動到 destination指定的位置。

若是 filename 不是合法的上傳文件,不會出現任何操做,move_uploaded_file() 將返回 false。翻譯

若是 filename 是合法的上傳文件,但出於某些緣由沒法移動,不會出現任何操做,move_uploaded_file() 將返回 false,此外還會發出一條警告。code

注意

  1. 本函數僅用於經過 HTTP POST 上傳的文件。
  2. 若是目標文件已經存在,將會被覆蓋。

 

move_uploaded_file()函數實例

使用move_uploaded_file()函數上傳文件到服務器。

<?php $tmp_filename = $_FILES['myupload']['tmp_name']; if(!move_uploaded_file($tmp_filename,"/path/to/dest/{$_FILES['myupload']['name']}")) { echo "An error has occurred moving the uploaded file.<BR>"; echo "Please ensure that if safe_mode is on that the " . "UID PHP is using matches the file."; exit; } else { echo "The file has been successfully uploaded!"; } ?>

 

move_uploaded_file上傳文件失敗的案例及解決方法

今天在實現一個在用戶註冊時上傳頭像圖片文件的PHP腳本時,出現了問題:php腳本代碼以下:

<?php define('ROOT',dirname(__FILE__).'/'); if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { if(is_uploaded_file($_FILES['file']['tmp_name'])){ $stored_path = ROOT.'/upload/'.basename($_FILES['file']['name']); if(move_uploaded_file($_FILES['file']['tmp_name'],$stored_path)){ echo "Stored in: " . $stored_path; }else{ echo 'Stored failed:file save error'; } }else{ echo 'Stored failed:no post '; } } } ?> 

當我執行執行上面的腳本時,腳本輸出"Stored failed:file save error",很明顯是出錯了.在php_error_log文件中我看到了出錯問題:權限不夠,我終於找到了出錯的地方:咱們存放圖片的目的目錄對執行PHP的用戶來講是沒有權限的,執行PHP腳本的用戶和我寫腳本代碼、建立圖片文件夾的用戶不是同一個用戶,所以只須要將文件權限改成777便可。

相關文章
相關標籤/搜索