萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP上傳文件代碼之入門代碼

PHP上傳文件代碼之入門代碼

在php中文件上傳我們都是利用表單的post來實例了,注意:
標簽的 enctype 屬性規定了在提交表單時要使用哪種內容類型。在表單需要二進制數據時,比如文件內容,請使用 \"multipart/form-data\"

這是一種非常簡單文件上傳方式。基於安全方面的考慮,您應當增加有關什麼用戶有權上傳文件的限制。

 代碼如下 復制代碼


<!DOCTYPE html>  
    <html>  
    <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
    <meta http-equiv="Content-Language" content="zh-cn" />  
    </head>  
    <body>  
    <form action="/upload.php" method="post" enctype="multipart/form-data">  
    <label for="file">Filename:</label>  
    <input type="file" name="file" id="file" /><br />  
    <input type="submit" name="submit" value="Submit" />  
    </form>  
    <?php  
    if($_POST){  
     if ( $_FILES["file"]["size"] < 2000000 )  
       {  
       if ($_FILES["file"]["error"] > 0)  
         {  
         echo "Return Code: " . $_FILES["file"]["error"] . "<br />";  
         }  
       else 
         {  
         echo "Upload: " . $_FILES["file"]["name"] . "<br />";  
         echo "Type: " . $_FILES["file"]["type"] . "<br />";  
         echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";  
         echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";  
       
         if (file_exists("upload/" . $_FILES["file"]["name"]))  
           {  
           echo $_FILES["file"]["name"] . " already exists. ";  
           }  
         else 
           {  
           move_uploaded_file($_FILES["file"]["tmp_name"],  
           "upload/" . $_FILES["file"]["name"]);  
           echo "Stored in: " . "upload/" . $_FILES["file"]["name"];  
           }  
         }  
       }  
     else 
       {  
       echo "Invalid file";  
       }  
    }  
    ?>  
    </body>  
    </html> 


第一個參數是表單的 input name,第二個下標可以是 "name", "type", "size", "tmp_name" 或 "error"。就像這樣:

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

實例

首先是上傳的提交頁面upfile.html

 代碼如下 復制代碼

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<form action="upload.php" enctype="multipart/form-data" method="POST">
<input type="hidden" name="max_file_size" value="33554432">
<input type="file" name="file">
<input type="submit" name="submit" value="上傳" />
</form>

1. PHP支持HTML以POST的方法傳輸文件,但是form中必須聲明enctype的屬性="multipart/form-data",否則整個form表單將不起任何作用。

2. form表單中必須含有一個name為MAX_FILE_SIZE的隱藏域,這個隱藏域用來指定用戶最大能上傳的文件大小,必須聲明在所有其他input標簽之前。如果文件超大的話,浏覽器直接就可以給出提示,不必浪費上傳的時間。

下面就是上傳處理文件upload.php

 代碼如下 復制代碼

<?php
 
    /* 設定上傳目錄 */
    $dest_dir='uploads';
 
    /* 檢測上傳目錄是否存在 */
    if( !is_dir($dest_dir) || !is_writeable($dest_dir) )
    {
        die("上傳目錄 ".$dest_dir." 不存在或無法寫入");
    }
 
    /* 設置允許上傳文件的類型 */
    $type=array("rar","zip","txt","c");
 
    /* 獲取上傳文件信息 */
    $upfile=&$HTTP_POST_FILES['file'];
 
    /* 獲取文件後綴名函數 */
    function fileext($filename)
    {
        return substr(strrchr($filename, '.'), 1);
    }
 
    /* 判斷上傳文件類型 */
    if( !in_array( strtolower( fileext($upfile['name'] ) ),$type) )
     {
        $text=implode(",",$type);
        echo "對不起,您只能上傳以下類型文件: ",$text,"<br>";
     }
     else
     {
        /* 設置文件名為"日期_文件名" */
        $dest=$dest_dir.'/'.date("ymdHis")."_".$upfile['name'];
 
        /* 移動上傳文件到指定文件夾 */
        $state=move_uploaded_file($upfile['tmp_name'],$dest);
 
        if ($state)
        {
            print("文件上傳成功!<br>");
            print("文件名:".$dest."<br>");
            print("上傳的文件大小:".( round($upfile['size'] / 1024,2) )." KB<br>");
        }
        else
        {
            /* 處理錯誤信息 */
            switch($upfile['error'])
            {
                case 1 : die("上傳文件大小超出 php.ini:upload_max_filesize 限制<br>");
                case 2 : die("上傳文件大小超出 MAX_FILE_SIZE 限制<br>");
                case 3 : die("文件僅被部分上傳<br>");
                case 4 : die("沒有文件被上傳<br>");
                case 5 : die("找不到臨時文件夾<br>");
                case 6 : die("文件寫入失敗<br>");
            }
        }
     }
 
?>

copyright © 萬盛學電腦網 all rights reserved