用 PHP 上傳檔案

建文 HTML 表單
要製作用作上傳檔案的表單與傳統的表單差不多,但必須將表單中的 enctype 屬性設成 multipart/form-data。enctype 屬性是指定瀏覽器對表單中的參數進行編碼的方法,預設值為 application/x-www-form-urlencoded。
以下是建立表單的例子:

upload.html

處理上傳檔案
建立了以上的 HTMl 表單後,下一步要做的就是後端的處理。在 PHP 中可以透過二維陣列 $HTTP_POST_FILES 或 $_FILES 來存取所上傳的檔案詳細內容。就以以上表單為例,輸入元素名為 userfile,各陣列元素為:

$_FILES[‘userfile’][‘name’] — 檔案在客戶端電腦上的檔案名稱
$_FILES[‘userfile’][‘type’] — 檔案的 MIME 類型,例如 “image/gif”
$_FILES[‘userfile’][‘size’] — 上傳檔案的檔案大小,單為為 bytes
$_FILES[‘userfile’][‘tmp_name’] — 上傳檔案儲存在伺服器端的暫存檔案名
$_FILES[‘userfile’][‘error’] — 上傳檔案的錯誤號碼


上傳檔案的 PHP 程式
以上介紹了建立上傳檔案用的表單及存取陣列,以下便建立上傳檔案的程式。首先需要建立一個目錄作儲存檔案,並需要確定 web server 有寫入的權限,一般設成 777 就可以,假設使用以上的上傳表單,以及上傳目錄是 “/var/www/uploads/”,以下是程式碼範例會顯示上傳檔案資訊以及上傳檔案:

upload.php

以上傳子使用了 copy 函式上傳檔案,其實 PHP 對上傳檔案已提供了兩個專用函式,它們是 move_uploaded_file() 及 is_uploaded_file(),有興趣的朋友可參考 PHP 使用手冊關於這兩個函式的簡介及用法。

程式的改進
以上的上傳程式只做了最基本的上傳動作,在實際應用中還是會有問題,例如不能容納相同的檔案名稱、同一目錄檔案過多時存取效率減低等問題。但本文只作一個入門的介紹,希望日後可以寫一篇更深入的文章作介紹。


Leave a Reply