国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

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

2024-05-05 00:02:53
字體:
供稿:網(wǎng)友

定義和用法

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

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

語法

move_uploaded_file(file,newloc)

 

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

 

說明

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

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

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

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

提示和注釋

注釋:本函數(shù)僅用于通過 HTTP POST 上傳的文件。

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

安全補充

來自w3c的介紹,下面說說我遇到的問題。

一般來說,我們都會這樣寫保存文件:

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

先解釋,這兩句代碼的含義:直接保存文件,同時文件名也為用戶上傳的文件名
好了,這下子風(fēng)險來了:

①直接保存文件。

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

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

上述代碼如果用戶使用中文文件名,則會報錯。

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

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

①要對用戶上傳的文件進行識別。

文件識別,這個部分有很多功能,我覺得用MIME type就很好,這個也很難偽造。

②要將文件名改換。

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

補充:

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

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

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

"upload/1.jpg";

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

move_uploaded_file()函數(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上傳文件失敗的案例及解決方法

今天在實現(xiàn)一個在用戶注冊時上傳頭像圖片文件的PHP腳本時,出現(xià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í)行上面的腳本時,腳本輸出"Stored failed:file save error",很明顯是出錯了.在php_error_log文件中我看到了出錯問題:權(quán)限不夠,我終于找到了出錯的地方:我們存放圖片的目的目錄對執(zhí)行PHP的用戶來說是沒有權(quán)限的,執(zhí)行PHP腳本的用戶和我寫腳本代碼、創(chuàng)建圖片文件夾的用戶不是同一個用戶,因此只需要將文件權(quán)限改為777即可。

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

功能:把上傳的臨時文件移動到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"];//上傳文件的類型  $size=$upfile["size"];//上傳文件的大小  $tmp_name=$upfile["tmp_name"];//上傳文件的臨時存放路徑 //判斷是否為圖片  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:超過了文件大小,在php.ini文件中設(shè)置<br/>    * 2:超過了文件的大小MAX_FILE_SIZE選項指定的值<br/>    * 3:文件只有部分被上傳<br/>    * 4:沒有文件被上傳<br/>    * 5:上傳文件大小為0    */   $error=$upfile["error"];//上傳后系統(tǒng)返回的值   echo "================<br/>";   echo "上傳文件名稱是:".$name."<br/>";   echo "上傳文件類型是:".$type."<br/>";   echo "上傳文件大小是:".$size."<br/>";   echo "上傳后系統(tǒng)返回的值是:".$error."<br/>";   echo "上傳文件的臨時存放路徑是:".$tmp_name."<br/>";    echo "開始移動上傳文件<br/>"; //把上傳的臨時文件移動到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 "超過了文件大小,在php.ini文件中設(shè)置";   }elseif ($error==2){    echo "超過了文件的大小MAX_FILE_SIZE選項指定的值";   }elseif ($error==3){    echo "文件只有部分被上傳";   }elseif ($error==4){    echo "沒有文件被上傳";   }else{    echo "上傳文件大小為0";   }  }else{   echo "請上傳jpg,gif,png等格式的圖片!";  } } ?> 

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

PHP,move_uploaded_file

好了這篇文章就介紹到這了,希望大家以后多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 石棉县| 南江县| 台湾省| 育儿| 丽江市| 敦化市| 个旧市| 航空| 于田县| 左贡县| 崇信县| 佛坪县| 大同县| 玉山县| 怀化市| 资源县| 溆浦县| 金昌市| 昌图县| 靖边县| 延寿县| 渑池县| 西城区| 临汾市| 班戈县| 仪陇县| 瓮安县| 遂宁市| 贺州市| 永康市| 南和县| 潼关县| 桐柏县| 家居| 洛宁县| 广宗县| 武功县| 宾阳县| 青铜峡市| 大港区| 天水市|