使用 PHP 上傳檔案
本是從使用 PHP 上傳檔案轉載而來~
以下是建立表單的例子:
upload.html
$_FILES['userfile']['name'] -- 檔案在客戶端電腦上的檔案名稱
$_FILES['userfile']['type'] -- 檔案的 MIME 類型,例如 "image/gif"
$_FILES['userfile']['size'] -- 上傳檔案的檔案大小,單為為 bytes
$_FILES['userfile']['tmp_name'] -- 上傳檔案儲存在伺服器端的暫存檔案名
$_FILES['userfile']['error'] -- 在 PHP 4.2.0 或更新的片本才有的這個陣列元素,上傳檔案的錯誤號碼
upload.php
以上傳子使用了 copy 函式上傳檔案,其實 PHP 對上傳檔案已提供了兩個專用函式,它們是 move_uploaded_file() 及 is_uploaded_file(),有興趣的朋友可參考 PHP 使用手冊關於這兩個函式的簡介及用法。
====================================================
歡迎轉載,但轉載時請保留此宣告,不得作為商業用途
作者: Sam Tang <admin{at}phpini{dot}com>
來源網站: http://www.phpdc.com/
建文 HTML 表單
要製作用作上傳檔案的表單與傳統的表單差不多,但必須將表單中的 enctype 屬性設成 multipart/form-data。enctype 屬性是指定瀏覽器對表單中的參數進行編碼的方法,預設值為 application/x-www-form-urlencoded。以下是建立表單的例子:
upload.html
01 <html>
02 <head>
03 <title>A simple upload form</title>
04 </head>
05 <body>
06 <h2>A simple upload form</h2>
07
08 <form method="post" action="upload.php" enctype="multipart/form-data">
09 Enter file name: <input type="file" name="userfile"><br>
10 <input type="submit" value="Upload">
11 </form>
12
13 </body>
14 </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 4.2.0 或更新的片本才有的這個陣列元素,上傳檔案的錯誤號碼
上傳檔案的 PHP 程式
以上介紹了建立上傳檔案用的表單及存取陣列,以下便建立上傳檔案的程式。首先需要建立一個目錄作儲存檔案,並需要確定 web server 有寫入的權限,一般設成 777 就可以,假設使用以上的上傳表單,以及上傳目錄是 "/var/www/uploads/",以下是程式碼範例會顯示上傳檔案資訊以及上傳檔案:upload.php
01 <html>
02 <head>
03 <title>A simple upload form</title>
04 </head>
05 <body>
06 <h2>Uploaded File Details</h2>
07
08 <?php
09 // display file details
10 echo "Filename: " . $_FILES['userfile']['name'] . "<br>";
11 echo "Temporary Name: " . $_FILES['userfile']['tmp_name'] . "<br>";
12 echo "Size: ". $_FILES['userfile']['size'] . "<br>";
13 echo "Type: ". $_FILES['userfile']['type'] . "<br>";
14
15 // copy file here
16 if(@copy($_FILES['userfile']['tmp_name'], "/var/www/uploads/" . $_FILES['userfile']['name'])){
17 echo "<b>File successfully upload</b>";
18 }else{
19 echo "<b>Error: failed to upload file</b>";
20 }
21 ?>
22
23 </body>
24 </html>
以上傳子使用了 copy 函式上傳檔案,其實 PHP 對上傳檔案已提供了兩個專用函式,它們是 move_uploaded_file() 及 is_uploaded_file(),有興趣的朋友可參考 PHP 使用手冊關於這兩個函式的簡介及用法。
程式的改進
以上的上傳程式只做了最基本的上傳動作,在實際應用中還是會有問題,例如不能容納相同的檔案名稱、同一目錄檔案過多時存取效率減低等問題。但本文只作一個入門的介紹,希望日後可以寫一篇更深入的文章作介紹。====================================================
歡迎轉載,但轉載時請保留此宣告,不得作為商業用途
作者: Sam Tang <admin{at}phpini{dot}com>
來源網站: http://www.phpdc.com/
沒有留言:
張貼留言