天天看點

php $_FILES處理檔案上傳

衆所周知,檔案上傳在一些網站應用中是必不可少的一部分。比如個人部落格上傳個性頭像,一些論壇分享好的學習資料等,這就涉及到使用表單處理檔案上傳的知識,在php中我們可以使用$_FILES這個全局數組來處理。下面就看看基本的檔案上傳處理部分。首先要說明的,能夠上傳檔案必定是一個安全隐患,是以在開發這部分功能時,一定要注意網站的安全性。而本文所探讨的隻是基本的檔案上傳部分,關于安全性這方面考慮的較少,希望在日後的進階應用中可以學習的到。

在PHP預定義變量這一節我們對一些預定義變量進行了一些大概的學習,其中就有$_FILES這個全局變量,那麼現在再來詳細的了解關于這個全局量的知識,因為我在處理檔案上傳時,要使用到它的相關功能。

$_FILES參數詳解:

$_FILES["file"]["name"] – 被上傳檔案的名稱

$_FILES["file"]["type"] – 被上傳檔案的類型

$_FILES["file"]["size"] – 被上傳檔案的大小,以位元組計

$_FILES["file"]["tmp_name"] – 存儲在伺服器的檔案的臨時副本的名稱

$_FILES["file"]["error"] – 由檔案上傳導緻的錯誤代碼

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

下面我們就來看看最基本的檔案上傳:

<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頁面如下圖:

php $_FILES處理檔案上傳

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檔案夾。下面再來看看上面那個示例:

  echo “大小: ” . ($_FILES["file"]["size"] / 1024) . ” Kb<br />”; 

 if (file_exists(”upload/” . $_FILES["file"]["name"]))

    {

      echo $_FILES["file"]["name"] . ” 檔案已經存在. “;

    }

      move_uploaded_file($_FILES["file"]["tmp_name"],

      “upload/” . $_FILES["file"]["name"]);

      echo “檔案已經被存儲到: ” . “upload/” . $_FILES["file"]["name"];

檔案已經被存儲到: upload/css.doc