首頁 後端開發 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

熱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中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

CakePHP 使用資料庫 CakePHP 使用資料庫 Sep 10, 2024 pm 05:25 PM

在 CakePHP 中使用資料庫非常容易。本章我們將了解CRUD(建立、讀取、更新、刪除)操作。

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

為了在 cakephp4 中處理日期和時間,我們將使用可用的 FrozenTime 類別。

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

為了進行文件上傳,我們將使用表單助理。這是文件上傳的範例。

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

CakePHP 建立驗證器 CakePHP 建立驗證器 Sep 10, 2024 pm 05:26 PM

可以透過在控制器中新增以下兩行來建立驗證器。

CakePHP 日誌記錄 CakePHP 日誌記錄 Sep 10, 2024 pm 05:26 PM

登入 CakePHP 是一項非常簡單的任務。您只需使用一項功能即可。您可以記錄任何後台程序(如 cronjob)的錯誤、異常、使用者活動、使用者採取的操作。在 CakePHP 中記錄資料很容易。提供了 log() 函數

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

See all articles