一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - PHP教程 - PHP move_uploaded_file() 函數(shù)(將上傳的文件移動(dòng)到新位置)

PHP move_uploaded_file() 函數(shù)(將上傳的文件移動(dòng)到新位置)

2019-10-15 11:10mdxy-dxy PHP教程

這篇文章主要介紹了PHP move_uploaded_file() 函數(shù),其實(shí)就是將上傳的文件移動(dòng)到新位置,需要的朋友可以參考下

定義和用法

move_uploaded_file() 函數(shù)將上傳的文件移動(dòng)到新位置。

若成功,則返回 true,否則返回 false。

語(yǔ)法

move_uploaded_file(file,newloc)

 

參數(shù) 描述
file 必需。規(guī)定要移動(dòng)的文件。
newloc 必需。規(guī)定文件的新位置。

 

說(shuō)明

本函數(shù)檢查并確保由 file 指定的文件是合法的上傳文件(即通過(guò) PHP 的 HTTP POST 上傳機(jī)制所上傳的)。如果文件合法,則將其移動(dòng)為由 newloc 指定的文件。

如果 file 不是合法的上傳文件,不會(huì)出現(xiàn)任何操作,move_uploaded_file() 將返回 false。

如果 file 是合法的上傳文件,但出于某些原因無(wú)法移動(dòng),不會(huì)出現(xiàn)任何操作,move_uploaded_file() 將返回 false,此外還會(huì)發(fā)出一條警告。

這種檢查顯得格外重要,如果上傳的文件有可能會(huì)造成對(duì)用戶或本系統(tǒng)的其他用戶顯示其內(nèi)容的話。

提示和注釋

注釋?zhuān)罕竞瘮?shù)僅用于通過(guò) HTTP POST 上傳的文件。

注意:如果目標(biāo)文件已經(jīng)存在,將會(huì)被覆蓋。

安全補(bǔ)充

來(lái)自w3c的介紹,下面說(shuō)說(shuō)我遇到的問(wèn)題。

一般來(lái)說(shuō),我們都會(huì)這樣寫(xiě)保存文件:

$fileName = $_SERVER['DOCUMENT_ROOT'].'/Basic/uploads/'.$_FILES['file']['name']; 
move_uploaded_file($_FILES['file']['tmp_name'],$fileName ) 

先解釋?zhuān)@兩句代碼的含義:直接保存文件,同時(shí)文件名也為用戶上傳的文件名
好了,這下子風(fēng)險(xiǎn)來(lái)了:

①直接保存文件。

這意味著不對(duì)文件進(jìn)行任何識(shí)別,如果有用戶上傳了一段后臺(tái)代碼保存為jpg后綴或者其他,要是管理員一不注意將其以php映射,然后訪問(wèn)這個(gè)后臺(tái),- -結(jié)果可想而知,要是他在后臺(tái)中執(zhí)行刪除所有數(shù)據(jù)庫(kù),整個(gè)網(wǎng)站直接GG。總之直接保存文件有很大風(fēng)險(xiǎn)。

②使用與用戶文件名相同的文件名。

上述代碼如果用戶使用中文文件名,則會(huì)報(bào)錯(cuò)。

一牽涉到文件名,就牽涉到編碼,要是文件名是英文+數(shù)字還好,如果包含中文那就頭大了,要重新對(duì)其編碼。

我認(rèn)為可靠的保存,應(yīng)該是這樣的:

①要對(duì)用戶上傳的文件進(jìn)行識(shí)別。

文件識(shí)別,這個(gè)部分有很多功能,我覺(jué)得用MIME type就很好,這個(gè)也很難偽造。

②要將文件名改換。

我覺(jué)得最好改成時(shí)間的格式像“201803264104421”這種文件名,也可以將文件名與數(shù)據(jù)庫(kù)相對(duì)應(yīng)起來(lái)。

補(bǔ)充:

有兩個(gè)參數(shù),第一個(gè)參數(shù)是你上傳后的臨時(shí)文件名,由系統(tǒng)自動(dòng)生成。通常其樣式為:

$_FILE["file"]["tmp_name"];

其中的file為你前臺(tái)文件上傳表單的名稱。
第二個(gè)參數(shù)就是包含有路徑的新的文件名。如:

"upload/1.jpg";

這樣,就會(huì)把你上傳的文件,移動(dòng)到當(dāng)前目錄下名稱upload的子目錄下,并把文件名保存為:1.jpg。

move_uploaded_file()函數(shù)實(shí)例

使用move_uploaded_file()函數(shù)上傳文件到服務(wù)器。

<?php
  $tmp_filename = $_FILES['myupload']['tmp_name'];
  if(!move_uploaded_file($tmp_filename,"/path/to/dest/{$_FILES['myupload']['name']}")) {
   echo "An error has occurred moving the uploaded file.<BR>";
   echo "Please ensure that if safe_mode is on that the " . "UID PHP is using matches the file.";
   exit;
  } else {
   echo "The file has been successfully uploaded!";
  }
?>

move_uploaded_file上傳文件失敗的案例及解決方法

今天在實(shí)現(xiàn)一個(gè)在用戶注冊(cè)時(shí)上傳頭像圖片文件的PHP腳本時(shí),出現(xiàn)了問(wèn)題:php腳本代碼如下:

<?php 
define('ROOT',dirname(__FILE__).'/'); 
 if ($_FILES["file"]["error"] > 0) 
 { 
  echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 
 } 
 else 
 { 
  echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
  echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; 
  echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 
  if (file_exists("upload/" . $_FILES["file"]["name"])) 
  { 
   echo $_FILES["file"]["name"] . " already exists. "; 
  } 
  else 
  { 
   if(is_uploaded_file($_FILES['file']['tmp_name'])){ 
    $stored_path = ROOT.'/upload/'.basename($_FILES['file']['name']); 
     
    if(move_uploaded_file($_FILES['file']['tmp_name'],$stored_path)){ 
     echo "Stored in: " . $stored_path; 
    }else{ 
     echo 'Stored failed:file save error'; 
    } 
   }else{ 
    echo 'Stored failed:no post '; 
   } 
   } 
 } 
?>

當(dāng)我執(zhí)行執(zhí)行上面的腳本時(shí),腳本輸出"Stored failed:file save error",很明顯是出錯(cuò)了.在php_error_log文件中我看到了出錯(cuò)問(wèn)題:權(quán)限不夠,我終于找到了出錯(cuò)的地方:我們存放圖片的目的目錄對(duì)執(zhí)行PHP的用戶來(lái)說(shuō)是沒(méi)有權(quán)限的,執(zhí)行PHP腳本的用戶和我寫(xiě)腳本代碼、創(chuàng)建圖片文件夾的用戶不是同一個(gè)用戶,因此只需要將文件權(quán)限改為777即可。

PHP開(kāi)發(fā)學(xué)習(xí) 文件上傳(move_uploaded_file)

功能:把上傳的臨時(shí)文件移動(dòng)到upload目錄下面,upload是在根目錄下已經(jīng)創(chuàng)建好的!!!

<form action="" enctype="multipart/form-data" method="post" 
  name="uploadfile">上傳文件:<input type="file" name="upfile" /><br> 
 <input type="submit" value="上傳" /></form> 
<?php 
//print_r($_FILES["upfile"]); 
if(is_uploaded_file($_FILES['upfile']['tmp_name'])){ 
 $upfile=$_FILES["upfile"]; 
//獲取數(shù)組里面的值 
 $name=$upfile["name"];//上傳文件的文件名 
 $type=$upfile["type"];//上傳文件的類(lèi)型 
 $size=$upfile["size"];//上傳文件的大小 
 $tmp_name=$upfile["tmp_name"];//上傳文件的臨時(shí)存放路徑 
//判斷是否為圖片 
 switch ($type){ 
  case 'image/pjpeg':$okType=true; 
   break; 
  case 'image/jpeg':$okType=true; 
   break; 
  case 'image/gif':$okType=true; 
   break; 
  case 'image/png':$okType=true; 
   break; 
 } 
 
 if($okType){ 
  /** 
   * 0:文件上傳成功<br/> 
   * 1:超過(guò)了文件大小,在php.ini文件中設(shè)置<br/> 
   * 2:超過(guò)了文件的大小MAX_FILE_SIZE選項(xiàng)指定的值<br/> 
   * 3:文件只有部分被上傳<br/> 
   * 4:沒(méi)有文件被上傳<br/> 
   * 5:上傳文件大小為0 
   */ 
  $error=$upfile["error"];//上傳后系統(tǒng)返回的值 
  echo "================<br/>"; 
  echo "上傳文件名稱是:".$name."<br/>"; 
  echo "上傳文件類(lèi)型是:".$type."<br/>"; 
  echo "上傳文件大小是:".$size."<br/>"; 
  echo "上傳后系統(tǒng)返回的值是:".$error."<br/>"; 
  echo "上傳文件的臨時(shí)存放路徑是:".$tmp_name."<br/>"; 
 
  echo "開(kāi)始移動(dòng)上傳文件<br/>"; 
//把上傳的臨時(shí)文件移動(dòng)到upload目錄下面(upload是在根目錄下已經(jīng)創(chuàng)建好的!!!) 
  move_uploaded_file($tmp_name,"upload/".$name); 
  $destination="upload/".$name; 
  echo "================<br/>"; 
  echo "上傳信息:<br/>"; 
  if($error==0){ 
   echo "文件上傳成功啦!"; 
   echo "<br>圖片預(yù)覽:<br>"; 
   echo "<img src=".$destination.">"; 
//echo "  }elseif ($error==1){ 
   echo "超過(guò)了文件大小,在php.ini文件中設(shè)置"; 
  }elseif ($error==2){ 
   echo "超過(guò)了文件的大小MAX_FILE_SIZE選項(xiàng)指定的值"; 
  }elseif ($error==3){ 
   echo "文件只有部分被上傳"; 
  }elseif ($error==4){ 
   echo "沒(méi)有文件被上傳"; 
  }else{ 
   echo "上傳文件大小為0"; 
  } 
 }else{ 
  echo "請(qǐng)上傳jpg,gif,png等格式的圖片!"; 
 } 
} 
?> 

執(zhí)行結(jié)果:

PHP move_uploaded_file() 函數(shù)(將上傳的文件移動(dòng)到新位置)

好了這篇文章就介紹到這了,希望大家以后多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青草原在线免费 | 无遮18禁在线永久免费观看挡 | 大象传媒1234区 | 草莓永久地域网名入2022 | 好吊操这里有精品 | 超兴奋朋友的中文字幕下 | 香港三级系列在线播放 | 电车痴汉(han) | 性导航h | 午夜精品久久久内射近拍高清 | 短篇艳妇系列 | 把女的下面扒开添视频 | 国产欧美另类久久精品91 | 午夜福利视频极品国产83 | 亚洲黄色大片 | 亚洲欧美日韩高清 | 91天堂一区二区 | 视频在线观看一区二区三区 | 日本无卡视频 | 青青热久久综合网伊人 | 天天有好逼 | 国产99视频精品免费视频免里 | 青青青国产 | 九九免费精品视频 | 久久亚洲精品AV成人无码 | 69日本人 | 俄罗斯bbbbbbbbb大片 | 五月香婷婷 | 热久久免费视频 | 久久免费观看视频 | 四虎影院在线免费观看视频 | 午夜神器老司机高清无码 | 清纯唯美 亚洲 | 久久内在线视频精品mp4 | 美琪美腿白丝交小说 | 日韩精品一区二区三区老鸭窝 | 美女黄板视频 | 精品国产免费观看一区高清 | 波多野结衣黑人系列在线观看 | 久久久精品国产免费A片胖妇女 | 色依依视频视频在线观看 |