你真的掌握php檔案上傳技術了嗎?這篇文章就為大家整理了php檔案上傳的相關資料,具有一定的參考價值,感興趣的小夥伴們可以參考一下
這裡首先聲明一下這一章的内容比較多,比較難,你要抱着和自己死磕的态度。細微之處不放過,多敲多練是王道。
學習就像爬山,得一步一步來,首先給自己定一個小目标,然後再堅持不懈地往高出攀爬,最終到達最頂峰。
請仔細斟酌上面兩句忠告
一、我的準備情況說明。
編輯器:sublime text3(用什麼編輯器看自己愛好)
伺服器建構:使用phpstudy2014建構伺服器,伺服器檔案存儲在我自身電腦D盤的www檔案中。(安裝phpstudy會自動生成www檔案,安裝在哪個盤自己做主)。運作phpstudy,通過在浏覽器位址欄輸入localhost可以通路伺服器中檔案。
上傳檔案的過程:浏覽器在用戶端上傳檔案,點選送出,檔案被傳送給伺服器中的某個php檔案進行處理,該php對該上傳檔案儲存到伺服器。
二、建立表單
請看我的html代碼

enctype
在Form元素的文法中,EncType表明送出資料的格式 用 Enctype 屬性指定将資料回發到伺服器時浏覽器使用的編碼類型。enctype有三種:
1、application/x-www-form-urlencoded: 窗體資料被編碼為名稱/值對。這是标準的編碼格式。
2、multipart/form-data: 窗體資料被編碼為一條消息,頁上的每個控件對應消息中的一個部分。
3、 text/plain: 窗體資料以純文字形式進行編碼,其中不含任何控件或格式字元。
補充(随便看看就好):orm的enctype屬性為編碼方式,常用有兩種:application/x-www-form-urlencoded和multipart/form-data,預設為application/x-www-form-urlencoded。 當action為get時候,浏覽器用x-www-form-urlencoded的編碼方式把form資料轉換成一個字串(name1=value1&name2=value2…),然後把這個字串append到url後面,用?分割,加載這個新的url。 當action為post時候,浏覽器把form資料封裝到http body中,然後發送到server。 如果沒有type=file的控件,用預設的application/x-www-form-urlencoded就可以了。 但是如果有type=file的話,就要用到multipart/form-data了。浏覽器會把整個表單以控件為機關分割,并為每個部分加上Content-Disposition(form-data或者file),Content-Type(預設為text/plain),name(控件name)等資訊,并加上分割符(boundary)。
有點難了解。
總歸就記住兩句話:如果input标簽中有type=file,則enctype=multipart/form-data。如果沒有type=file一般情況下使用application/x-www-form-urlencoded。
檔案上傳時都要将資料進行一定轉化才能上傳到伺服器,application/x-www-form-urlencoded和multipart/form-data兩者之間的差別就在與轉化編碼方式不同。
三、建立php檔案用于處理上傳的檔案。
上傳檔案後效果如下:
每一個上傳檔案都有name、type、size、tmp_name等資訊。檔案上傳後,這些檔案相關資訊存在FILES這個數組變量。_FILES[“myfile”][“name”]相當于一個多元數組的通路,FILES先擷取表單名稱為myfile的input上傳的檔案資料,然後再通路name、type、size、error等資料。_FILES["myfile"]["error"]用來處理檔案沒有正常上傳的情況,例如超過限定上傳的檔案大小。如果FILES[“myfile”][“error”]=0,表示檔案正常上傳。_FILES[“myfile”][“error”]>0表示檔案沒有正常上傳。
FILES[“myfile”][“error”]=1上傳檔案超過伺服器限定的值,比如超過伺服器空間大小。_FILES[“myfile”][“error”]=2 超過浏覽器限定上傳的值 $_FILES[“myfile”][“error”]=3檔案隻有部分被上傳
FILES[“myfile”][“error”]=4沒有檔案本上傳。_FILES[“myfile”][“error”]還可以為5、6、7、8,這裡不做深究,隻需知道其大于0時就意味這檔案上傳出錯即可。
上傳限制
通常情況下,伺服器通常會限制伺服器上傳檔案的大小或者類型。我們在上面php代碼的基礎上添加對上傳檔案代碼的限制。
先熟悉幾個函數用法:
explode()函數用于分割字元串,例:explode(“.”,”aaa.HTML”)就是在點的位置将這個字元串分成”aaa”和”HTML”兩個字元串,這兩個字元串按順序存儲在同一個數組中。
end()擷取數組中最後一個元素的值。
in_array()在數組中查找某個元素,看是否存在,存在傳回為true,不存在傳回為false。
//第一步:明确伺服器規定上傳至伺服器的檔案類型。這裡我們隻允許上傳以下類型的圖檔。
$allowedExts = array("gif