在PHP中上傳一個文件建一個表單要比ASP中靈活得多。具體的看代碼。
如:
而後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[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 //文件只有部分被上傳
數組
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()函數用於將HTTP POST的文件上傳到服務器,若是目標文件已經存在,將會被覆蓋。本文章向你們介紹move_uploaded_file()函數的使用方法及在使用該函數時須要注意的問題和解決方法,須要的朋友能夠參考一下。函數
move_uploaded_file() 函數將上傳的文件移動到新位置。若成功,則返回 true,不然返回 false。post
語法this
move_uploaded_file(filename,destination)
參數 spa
參數 | 描述 |
---|---|
filename | 上傳的文件的文件名。 |
destination | 移動文件到這個位置。 |
若是 filename 不是合法的上傳文件,不會出現任何操做,move_uploaded_file() 將返回 false。翻譯
若是 filename 是合法的上傳文件,但出於某些緣由沒法移動,不會出現任何操做,move_uploaded_file() 將返回 false,此外還會發出一條警告。code
注意
使用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!"; } ?>
今天在實現一個在用戶註冊時上傳頭像圖片文件的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便可。