1. 程式人生 > >php $_FILES處理文件上傳

php $_FILES處理文件上傳

選項 ref 探討 art else 進一步 參數 我們 input

眾所周知,文件上傳在一些網站應用中是必不可少的一部分。比如個人博客上傳個性頭像,一些論壇分享好的學習資料等,這就涉及到使用表單處理文件上傳的知識,在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頁面如下圖:

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

<?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"];
}

?>

再來看看結果:

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

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

php $_FILES處理文件上傳