php $_FILES處理文件上傳(轉)

php $_FILES處理文件上傳 2011-02-14 17:27:48

衆所周知,文件上傳在一些網站應用中是必不可少的一部分。好比我的博客上傳個性頭像,一些論壇分享好的學習資料等,這就涉及到使用表單處理文件上傳的知識,在php中咱們可使用$_FILES這個全局數組來處理。下面就看看基本的文件上傳處理部分。首先要說明的,可以上傳文件一定是一個安全隱患,因此在開發這部分功能時,必定要注意網站的安全性。而本文所探討的只是基本的文件上傳部分,關於安全性這方面考慮的較少,但願在往後的高級應用中能夠學習的到。php

PHP預約義變量這一節咱們對一些預約義變量進行了一些大概的學習,其中就有$_FILES這個全局變量,那麼如今再來詳細的瞭解關於這個全局量的知識,由於我在處理文件上傳時,要使用到它的相關功能。css

$_FILES參數詳解:
$_FILES["file"]["name"] – 被上傳文件的名稱
$_FILES["file"]["type"] – 被上傳文件的類型
$_FILES["file"]["size"] – 被上傳文件的大小,以字節計
$_FILES["file"]["tmp_name"] – 存儲在服務器的文件的臨時副本的名稱
$_FILES["file"]["error"] – 由文件上傳致使的錯誤代碼html

$_FILES["file"]["error"]中的["error"]值狀況:
UPLOAD_ERR_OK
0:沒有錯誤發生,文件上傳成功
UPLOAD_ERR_INI_SIZE
1:上傳的文件超過了 php.ini中upload_max_filesize(默認狀況爲2M) 選項限制的值
UPLOAD_ERR_FORM_SIZE
2:上傳文件的大小超過了 HTML表單中MAX_FILE_SIZE選項指定的值
UPLOAD_ERR_PARTIAL
3:文件只有部分被上傳
UPLOAD_ERR_NO_FILE
4:沒有文件被上傳
5:傳文件大小爲0
下面咱們就來看看最基本的文件上傳:windows

<html>
<body>
<form action=」upload-file.php」 method=」post」
enctype=」multipart/form-data」>
<label for=」file」>文件名:</label>
<input type=」file」 name=」file」 id=」file」 />
<br />
<input type=」submit」 name=」submit」 value=」提交」 />
</form>
</body>
</html>

這個HTML頁面以下圖:數組

upload-file

upload-file.php代碼以下:安全

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo 「錯誤: 」 . $_FILES["file"]["error"] . 「<br />」;
  }
else
  {
  echo 「文件名: 」 . $_FILES["file"]["name"] . 「<br />」;
  echo 「類型: 」 . $_FILES["file"]["type"] . 「<br />」;
  echo 「大小: 」 . ($_FILES["file"]["size"] / 1024) . 」 Kb<br />」;
  echo 「存儲位置: 」 . $_FILES["file"]["tmp_name"];
  }
?>

咱們隨便上傳一個word文件,看看處理結果如何:服務器

文件名: css.doc
類型: application/msword
大小: 81.5 Kb
存儲位置: C:\WINDOWS\temp\php7D.tmp

能夠看到,這個文件被保存到C:\WINDOWS\temp\臨時目錄下,你可能想去看看在這個目錄是否存在這個文件,但結果是:沒有!爲何呢?由於php在執行完這個腳本後,把它生成的文件又刪除了,因此在上傳以後還要進一步處理。另外還隨便提一下,在windows下,php所生成的臨時文件如php7D.tmp是有規律的,也就是說在下一次經過表單上傳的文件應該像這樣:php7E.tmp
爲了保存咱們上傳的文件,要使用move_uploaded_file函數。在你的upload-file.php文件同目錄建立一個upload文件夾。下面再來看看上面那個示例:php7

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo 「錯誤: 」 . $_FILES["file"]["error"] . 「<br />」;
  }
else
  {
  echo 「文件名: 」 . $_FILES["file"]["name"] . 「<br />」;
  echo 「類型: 」 . $_FILES["file"]["type"] . 「<br />」;
  echo 「大小: 」 . ($_FILES["file"]["size"] / 1024) . 」 Kb<br />」; 
  }
 if (file_exists(」upload/」 . $_FILES["file"]["name"]))
    {
      echo $_FILES["file"]["name"] . 」 文件已經存在. 「;
    }
else
    {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      「upload/」 . $_FILES["file"]["name"]);
      echo 「文件已經被存儲到: 」 . 「upload/」 . $_FILES["file"]["name"];
    }

 

?>app

再來看看結果:函數

文件名: css.doc
類型: application/msword
大小: 81.5 Kb
文件已經被存儲到: upload/css.doc

通過這一步的處理,在咱們所指定的地方(upload)就能夠獲得咱們上傳的文件。到這裏,最基本的文件上傳就結束了。還說一下,咱們在上傳的時候必定要考慮文件的類型,要考慮文件的大小等。關於這些方面隨着學習的深刻再來介紹吧

相關文章
相關標籤/搜索