国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 后端開發(fā) php教程 php實現(xiàn)文件上傳詳解

php實現(xiàn)文件上傳詳解

May 30, 2018 am 11:29 AM
php 上傳 詳解

你真的掌握php文件上傳技術(shù)了嗎?這篇文章就為大家整理了php文件上傳的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

這里首先聲明一下這一章的內(nèi)容比較多,比較難,你要抱著和自己死磕的態(tài)度。細(xì)微之處不放過,多敲多練是王道。
學(xué)習(xí)就像爬山,得一步一步來,首先給自己定一個小目標(biāo),然后再堅持不懈地往高出攀爬,最終到達最頂峰。
請仔細(xì)斟酌上面兩句忠告

一、我的準(zhǔn)備情況說明。

編輯器:sublime text3(用什么編輯器看自己愛好)
服務(wù)器構(gòu)建:使用phpstudy2014構(gòu)建服務(wù)器,服務(wù)器文件存儲在我自身電腦D盤的www文件中。(安裝phpstudy會自動生成www文件,安裝在哪個盤自己做主)。運行phpstudy,通過在瀏覽器地址欄輸入localhost可以訪問服務(wù)器中文件。
上傳文件的過程:瀏覽器在客戶端上傳文件,點擊提交,文件被傳送給服務(wù)器中的某個php文件進行處理,該php對該上傳文件保存到服務(wù)器。

二、創(chuàng)建表單

請看我的html代碼

enctype

在Form元素的語法中,EncType表明提交數(shù)據(jù)的格式 用 Enctype 屬性指定將數(shù)據(jù)回發(fā)到服務(wù)器時瀏覽器使用的編碼類型。enctype有三種:
1、application/x-www-form-urlencoded: 窗體數(shù)據(jù)被編碼為名稱/值對。這是標(biāo)準(zhǔn)的編碼格式。
2、multipart/form-data: 窗體數(shù)據(jù)被編碼為一條消息,頁上的每個控件對應(yīng)消息中的一個部分。
3、 text/plain: 窗體數(shù)據(jù)以純文本形式進行編碼,其中不含任何控件或格式字符。?
補充(隨便看看就好):orm的enctype屬性為編碼方式,常用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認(rèn)為application/x-www-form-urlencoded。 當(dāng)action為get時候,瀏覽器用x-www-form-urlencoded的編碼方式把form數(shù)據(jù)轉(zhuǎn)換成一個字串(name1=value1&name2=value2…),然后把這個字串a(chǎn)ppend到url后面,用?分割,加載這個新的url。 當(dāng)action為post時候,瀏覽器把form數(shù)據(jù)封裝到http body中,然后發(fā)送到server。 如果沒有type=file的控件,用默認(rèn)的application/x-www-form-urlencoded就可以了。 但是如果有type=file的話,就要用到multipart/form-data了。瀏覽器會把整個表單以控件為單位分割,并為每個部分加上Content-Disposition(form-data或者file),Content-Type(默認(rèn)為text/plain),name(控件name)等信息,并加上分割符(boundary)。

有點難理解。
總歸就記住兩句話:如果input標(biāo)簽中有type=file,則enctype=multipart/form-data。如果沒有type=file一般情況下使用application/x-www-form-urlencoded。
文件上傳時都要將數(shù)據(jù)進行一定轉(zhuǎn)化才能上傳到服務(wù)器,application/x-www-form-urlencoded和multipart/form-data兩者之間的區(qū)別就在與轉(zhuǎn)化編碼方式不同。

三、創(chuàng)建php文件用于處理上傳的文件。

上傳文件后效果如下:

php實現(xiàn)文件上傳詳解0表示文件沒有正常上傳。
FILES[“myfile”][“error”]=1上傳文件超過服務(wù)器限定的值,比如超過服務(wù)器空間大小。_FILES[“myfile”][“error”]=2 超過瀏覽器限定上傳的值 $_FILES[“myfile”][“error”]=3文件只有部分被上傳

FILES[“myfile”][“error”]=4沒有文件本上傳。_FILES[“myfile”][“error”]還可以為5、6、7、8,這里不做深究,只需知道其大于0時就意味這文件上傳出錯即可。

上傳限制

通常情況下,服務(wù)器通常會限制服務(wù)器上傳文件的大小或者類型。我們在上面php代碼的基礎(chǔ)上添加對上傳文件代碼的限制。
先熟悉幾個函數(shù)用法:
explode()函數(shù)用于分割字符串,例:explode(“.”,”aaa.HTML”)就是在點的位置將這個字符串分成”aaa”和”HTML”兩個字符串,這兩個字符串按順序存儲在同一個數(shù)組中。
end()獲取數(shù)組中最后一個元素的值。
in_array()在數(shù)組中查找某個元素,看是否存在,存在返回為true,不存在返回為false。

<?php
//第一步:明確服務(wù)器規(guī)定上傳至服務(wù)器的文件類型。這里我們只允許上傳以下類型的圖片。
$allowedExts = array("gif", "jpeg", "jpg", "png");// 允許上傳的圖片后綴
//第二部:獲取上傳的文件名稱,通過explorde()函數(shù)將其分割成字符串形式的數(shù)組。
$temp = explode(".", $_FILES["myfile"]["name"]);
echo $_FILES["file"]["size"];

$extension = end($temp);   // end函數(shù)用于獲取數(shù)組中最后一個元素的值。
//第三步:列出上傳文件需要滿足的條件
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數(shù)組中查找$extension這個字符串
{
  if ($_FILES["myfile"]["error"] > 0)
  {
    echo "錯誤:: " . $_FILES["myfile"]["error"] . "<br>";
    //舉個例子服務(wù)器空間不足,文件只能上傳部分就會出現(xiàn)錯誤。
  }
  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 "非法的文件格式";
}
?>

四、保存上傳的文件

文件上傳后,它是保存在一個臨時的位置。腳本結(jié)束時它就會消失。如果要把他永久的保存在服務(wù)器中,我們要把它保存在另一個位置。
. file_exists(“upload/” . FILES[“file”][“name”])檢查文件或目錄是否存在。.moveuploadedfile(_FILES["file"]["tmp_name"], "upload/" . $_FILES[“myfile”][“name”]);將上傳文件從臨時位置轉(zhuǎn)移到服務(wù)器空間。

<?php
//第一步:明確服務(wù)器規(guī)定上傳至服務(wù)器的文件類型。這里我們只允許上傳以下類型的圖片。
$allowedExts = array("gif", "jpeg", "jpg", "png");// 允許上傳的圖片后綴
//第二部:獲取上傳的文件名稱,通過explorde()函數(shù)將其分割成字符串形式的數(shù)組。
$temp = explode(".", $_FILES["myfile"]["name"]);
echo $_FILES["myfilefile"]["size"];
$extension = end($temp);   // end函數(shù)用于獲取數(shù)組中最后一個元素的值。
//第三步:列出上傳文件需要滿足的
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數(shù)組中查找$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>";

    // 判斷當(dāng)期目錄(即www文件夾中)下的 upload 目錄(自己創(chuàng)建,名字自取)是否存在該文件
    // 如果沒有 upload 目錄,你需要創(chuàng)建它,upload 目錄權(quán)限為 777
    if (file_exists("upload/" . $_FILES["myfile"]["name"]))
    {
      echo $_FILES["myfile"]["name"] . " 文件已經(jīng)存在。 ";
    }
    else
    {
      // 如果 upload 目錄不存在該文件則將文件上傳到 upload 目錄下
      move_uploaded_file($_FILES["myfile"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);//
      echo "文件存儲在: " . "upload/" . $_FILES["myfile"]["name"];
    }
  }
}
else
{
  echo "非法的文件格式";
}
?>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。


相關(guān)推薦:

PHP將身份證正反面兩張照片合成一張圖片的方法

PHP使用SWOOLE擴展實現(xiàn)定時同步 MySQL 數(shù)據(jù)的方法

PHP關(guān)于對象知識總結(jié)

以上是php實現(xiàn)文件上傳詳解的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

如何在PHP中獲取當(dāng)前的會話ID? 如何在PHP中獲取當(dāng)前的會話ID? Jul 13, 2025 am 03:02 AM

在PHP中獲取當(dāng)前會話ID的方法是使用session_id()函數(shù),但必須先調(diào)用session_start()才能成功獲取。1.調(diào)用session_start()啟動會話;2.使用session_id()讀取會話ID,輸出類似abc123def456ghi789的字符串;3.若返回為空,檢查是否遺漏session_start()、用戶是否首次訪問或會話是否被銷毀;4.會話ID可用于日志記錄、安全驗證和跨請求通信,但需注意安全性。確保正確開啟會話后即可順利獲取ID。

php從字符串獲取子字符串 php從字符串獲取子字符串 Jul 13, 2025 am 02:59 AM

要從PHP字符串中提取子字符串,可使用substr()函數(shù),其語法為substr(string$string,int$start,?int$length=null),若未指定長度則截取至末尾;處理多字節(jié)字符如中文時應(yīng)使用mb_substr()函數(shù)以避免亂碼;若需根據(jù)特定分隔符截取字符串,可使用explode()或結(jié)合strpos()與substr()實現(xiàn),例如提取文件名擴展名或域名。

如何將字符串分為PHP中的數(shù)組 如何將字符串分為PHP中的數(shù)組 Jul 13, 2025 am 02:59 AM

在PHP中,最常用的方法是使用explode()函數(shù)將字符串拆分為數(shù)組。該函數(shù)通過指定的分隔符將字符串分割成多個部分并返回數(shù)組,語法為explode(separator,string,limit),其中separator為分隔符,string為原字符串,limit為可選參數(shù)控制最大分割數(shù)量。例如$str="apple,banana,orange";$arr=explode(",",$str);結(jié)果為["apple","bana

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時復(fù)制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內(nèi)存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助于編寫更穩(wěn)定可靠的代碼。

在C中使用std :: Chrono 在C中使用std :: Chrono Jul 15, 2025 am 01:30 AM

std::chrono在C 中用于處理時間,包括獲取當(dāng)前時間、測量執(zhí)行時間、操作時間點與持續(xù)時間及格式化解析時間。1.獲取當(dāng)前時間使用std::chrono::system_clock::now(),可轉(zhuǎn)換為可讀字符串但系統(tǒng)時鐘可能不單調(diào);2.測量執(zhí)行時間應(yīng)使用std::chrono::steady_clock以確保單調(diào)性,并通過duration_cast轉(zhuǎn)換為毫秒、秒等單位;3.時間點(time_point)和持續(xù)時間(duration)可相互操作,但需注意單位兼容性和時鐘紀(jì)元(epoch)

PHP如何處理環(huán)境變量? PHP如何處理環(huán)境變量? Jul 14, 2025 am 03:01 AM

toAccessenvironmentVariablesInphp,useGetenv()或$ _envsuperglobal.1.getEnv('var_name')retievesSpecificvariable.2。$ _ en v ['var_name'] accessesvariablesifvariables_orderInphp.iniincludes“ e” .setVariablesViaCliWithvar = vualitephpscript.php,inapach

PHP中的晚期靜態(tài)結(jié)合是什么? PHP中的晚期靜態(tài)結(jié)合是什么? Jul 13, 2025 am 02:36 AM

exmallationalbindinginphpallowsstatic :: torefertotheclassInallyCallentimeInIminInheritancesCenarios.beForePhp5.3,self :: wallding referferenceedtheclassecceedtheclasswhereTheSheTheShodwhereTheShodWhereTheShodWhereTheShodWhereShodWhereShodWhereTheShodWhereShodeDwaseDined,causisionChildClass :: sayhello()sayhello()sayhello()sayhello()

See all articles