搜尋
首頁後端開發php教程php的文件上傳

php的文件上傳

Jun 04, 2018 pm 05:21 PM
php上傳文件

你真的掌握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。

<?php
//第一步:明确服务器规定上传至服务器的文件类型。这里我们只允许上传以下类型的图片。
$allowedExts = array("gif", "jpeg", "jpg", "png");// 允许上传的图片后缀
//第二部:获取上传的文件名称,通过explorde()函数将其分割成字符串形式的数组。
$temp = explode(".", $_FILES["myfile"]["name"]);
echo $_FILES["file"]["size"];

$extension = end($temp);   // end函数用于获取数组中最后一个元素的值。
//第三步:列出上传文件需要满足的条件
if ((($_FILES["myfile"]["type"] == "image/gif")
|| ($_FILES["myfile"]["type"] == "image/jpeg")
|| ($_FILES[myfile"]["type"] == "image/jpg")
|| ($_FILES["myfile"]["type"] == "image/pjpeg")
|| ($_FILES["myfile"]["type"] == "image/x-png")
|| ($_FILES["myfile"]["type"] == "image/png"))
&& ($_FILES["myfile"]["size"] < 204800)  // 小于 200 kb
&& in_array($extension, $allowedExts))
  //in_array表示在$allowedExts数组中查找$extension这个字符串
{
  if ($_FILES["myfile"]["error"] > 0)
  {
    echo "错误:: " . $_FILES["myfile"]["error"] . "<br>";
    //举个例子服务器空间不足,文件只能上传部分就会出现错误。
  }
  else
  {
    echo "上传文件名: " . $_FILES["myfile"]["name"] . "<br>";
    echo "文件类型: " . $_FILES["myfile"]["type"] . "<br>";
    echo "文件大小: " . ($_FILES["myfile"]["size"] / 1024) . " kB<br>";
    echo "文件临时存储的位置: " . $_FILES["myfile"]["tmp_name"] . "<br>";
  }
}
else
{
  echo "非法的文件格式";
}
?>

四、已儲存上傳的檔案

檔案上傳後,它是儲存在一個暫時的位置。腳本結束時它就會消失。如果要把他永久的保存在伺服器中,我們要把它保存在另一個位置。
. file_exists(“upload/” . FILES[“file”][“name”])檢查檔案或目錄是否存在。 .moveuploadedfile(_FILES["file"]["tmp_name"], "upload/" . $_FILES[“myfile”][“name”]);將上傳檔案從暫存位置轉移到伺服器空間。

<?php
//第一步:明确服务器规定上传至服务器的文件类型。这里我们只允许上传以下类型的图片。
$allowedExts = array("gif", "jpeg", "jpg", "png");// 允许上传的图片后缀
//第二部:获取上传的文件名称,通过explorde()函数将其分割成字符串形式的数组。
$temp = explode(".", $_FILES["myfile"]["name"]);
echo $_FILES["myfilefile"]["size"];
$extension = end($temp);   // end函数用于获取数组中最后一个元素的值。
//第三步:列出上传文件需要满足的
if ((($_FILES["myfile"]["type"] == "image/gif")
|| ($_FILES["myfile"]["type"] == "image/jpeg")
|| ($_FILES["myfile"]["type"] == "image/jpg")
|| ($_FILES["myfile"]["type"] == "image/pjpeg")
|| ($_FILES["myfile"]["type"] == "image/x-png")
|| ($_FILES["myfile"]["type"] == "image/png"))
&& ($_FILES["myfile"]["size"] < 204800)  // 小于 200 kb
&& in_array($extension, $allowedExts))//in_array表示在$allowedExts数组中查找$extension这个字符串
{
  if ($_FILES["myfilefile"]["error"] > 0)
  {
    echo "错误:: " . $_FILES["myfile"]["error"] . "<br>";
  }
  else
  {
    echo "上传文件名: " . $_FILES["myfile"]["name"] . "<br>";
    echo "文件类型: " . $_FILES["myfile"]["type"] . "<br>";
    echo "文件大小: " . ($_FILES["myfile"]["size"] / 1024) . " kB<br>";
    echo "文件临时存储的位置: " . $_FILES["myfile"]["tmp_name"] . "<br>";

    // 判断当期目录(即www文件夹中)下的 upload 目录(自己创建,名字自取)是否存在该文件
    // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
    if (file_exists("upload/" . $_FILES["myfile"]["name"]))
    {
      echo $_FILES["myfile"]["name"] . " 文件已经存在。 ";
    }
    else
    {
      // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
      move_uploaded_file($_FILES["myfile"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);//
      echo "文件存储在: " . "upload/" . $_FILES["myfile"]["name"];
    }
  }
}
else
{
  echo "非法的文件格式";
}
?>

以上是php的文件上傳的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP的當前狀態:查看網絡開發趨勢PHP的當前狀態:查看網絡開發趨勢Apr 13, 2025 am 12:20 AM

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP與其他語言:比較PHP與其他語言:比較Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP與Python:核心功能PHP與Python:核心功能Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP:網絡開發的關鍵語言PHP:網絡開發的關鍵語言Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP:許多網站的基礎PHP:許多網站的基礎Apr 13, 2025 am 12:07 AM

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

超越炒作:評估當今PHP的角色超越炒作:評估當今PHP的角色Apr 12, 2025 am 12:17 AM

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

PHP中的弱參考是什麼?什麼時候有用?PHP中的弱參考是什麼?什麼時候有用?Apr 12, 2025 am 12:13 AM

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

解釋PHP中的__ Invoke Magic方法。解釋PHP中的__ Invoke Magic方法。Apr 12, 2025 am 12:07 AM

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用