国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

php的文件上傳入門教程(實例講解)

2019-11-20 20:50:52
字體:
來源:轉載
供稿:網友

一、文件上傳

為了讓客戶端的用戶能夠上傳文件,我們必須在用戶界面中提供一個表單用于提交上傳文件的請求。由于上傳的文件是一種特殊數據,不同于其它的post數據,所以我們必須給表單設置一個特殊的編碼:

復制代碼 代碼如下:
<form action="upload.php" method="POST" enctype="multipart/form-data"></form>


以上的enctype屬性,你可能不太熟悉,因為這常常會被忽略掉。但是,如果http post請求中既有常規數據,又包含文件類數據的話,這個屬性就應該顯示加上,這樣可以提高針對各種瀏覽器的兼容性。

接下來,我們得向表單中添加一個用于上傳文件的字段:

復制代碼 代碼如下:
<input type="file" name="attachment">


上述文件字段在各種瀏覽器中可能表現會有所不同。對于大多數的瀏覽器,上述字段都會被渲染成一個文本框加上一個瀏覽按鈕。這樣,用戶既可以自行輸入文件的路徑到文本框中,也可以通過瀏覽按鈕從本地硬盤上選擇所要上傳的文件。但是,在蘋果的Safari中,貌似只能使用瀏覽這種方式。當然,你也可以自定義這個上傳框的樣式,使它看起來比默認的樣式優雅些。

下面,為了更好的闡述怎么樣處理文件上傳,舉一個完整的例子。比如,以下一個表單允許用戶向我的本地服務器上上傳附件:

復制代碼 代碼如下:
<p>請上傳你的附件:</p>
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="attachment">
<input type="submit" value="上傳附件">
</form>

提示:可以通過php.ini中的upload_max_filesize來設置允許上傳文件的最大值。另外,還有一個post_max_size也可以用來設置允許上傳的最大表單數據,具體意思就是表單中各種數據之和,所以你也可以通過設置這個字段來控制上傳文件的最大值。但是,注意后者的值必須大于前者,因為前者屬于后者的一部分表單數據。

 

圖1. 顯示在在firefox中的上傳表單

當這個表單提交的時候,http請求會被發送到upload.php。為了顯示具體哪些信息可以在upload.php中使用,我在upload.php將其打印出來:

復制代碼 代碼如下:

header('Content-Type: text/plain');
print_r($_FILES);


下面來做個試驗,假如我通過以上表單上傳一個本博客的logo到我的本地服務器www.360weboy.me/upload.php,看看在upload.php中會輸出什么信息:
復制代碼 代碼如下:
Array
        (
            [attachment] => Array
                (
                    [name] => boy.jpg
                    [type] => image/jpeg
                    [tmp_name] => D:/xampp/tmp/php1168.tmp
                    [error] => 0
                    [size] => 11490
                )

        )


以上就是文件上傳后,在全局數組中的關于當前上傳文件的所有信息。但是,我們是否能夠保證這些信息是安全的,假如name或者其它信息被篡改過了呢?我們時刻需要對來自客戶端的信息保持警惕!

具體的http請求的各個部分
為了更好的理解文件上傳,我們必須核對下客戶端發送的http請求中到底包含了那些具體的信息。先前我上傳的附件是本博客的logo,因為是圖片,不太適合我們做以上實驗。所以,我重新上傳一個test.text文本文件,其中具體包含了以下內容:

復制代碼 代碼如下:

    360w
    360days
    Life Of A Web Boy

Okay?,F在我上傳這個文本文件,在upload.php中會輸出:
復制代碼 代碼如下:


        Array
        (
            [attachment] => Array
                (
                    [name] => test.txt
                    [type] => text/plain
                    [tmp_name] => D:/xampp/tmp/php51C0.tmp
                    [error] => 0
                    [size] => 40
                )

        )
 
  
我們再來看下相關的瀏覽器發送的http post請求(一些可選的頭部我省略了):
復制代碼 代碼如下:


        POST /upload.php HTTP/1.1
        Host: www.360weboy.me
        Referer: http://www.360weboy.me/
        multipart/form-data; boundary=---------------------------24464570528145
        Content-Length: 234

        -----------------------------24464570528145
        Content-Disposition: form-data; name="attachment"; filename="test.txt"
        Content-Type: text/plain

        360weboy

        360days

        Life Of A Web Boy
        -----------------------------24464570528145--
   
從上面的請求格式中有幾個字段我們要關注下的,分別是name, filename以及Content-Type.它們分別表示上傳文件框在form表單中的字段名-attachment,用戶從本地硬盤中上傳的文件名 主站蜘蛛池模板: 南京市| 新泰市| 深圳市| 祁门县| 嘉峪关市| 惠东县| 新乐市| 沽源县| 南投市| 潜江市| 和顺县| 布尔津县| 册亨县| 乌苏市| 苏州市| 通江县| 安徽省| 昔阳县| 太原市| 应城市| 汉寿县| 蒲城县| 广元市| 盐边县| 扬州市| 宁远县| 青河县| 澎湖县| 五华县| 邵阳县| 邛崃市| 九江市| 内乡县| 磐石市| 枣强县| 平和县| 息烽县| 和田县| 环江| 波密县| 株洲县|