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

首頁 > 編程 > PHP > 正文

關(guān)于PHP的move_uploaded_file() 函數(shù)的解析

2020-03-22 20:05:14
字體:
供稿:網(wǎng)友
這篇文章主要介紹了PHP move_uploaded_file() 函數(shù),其實(shí)就是將上傳的文件移動(dòng)到新位置,需要的朋友可以參考下

定義和用法

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

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

語法

move_uploaded_file(file,newloc)

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

說明

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

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

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

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

提示和注釋

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

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

安全補(bǔ)充

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

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

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

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

①直接保存文件。

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

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

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

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

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

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

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

②要將文件名改換。

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

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

PHP開發(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 html' target='_blank'>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 //上傳文件的臨時(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:超過了文件大小,在php.ini文件中設(shè)置 br/  * 2:超過了文件的大小MAX_FILE_SIZE選項(xiàng)指定的值 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 上傳文件的臨時(shí)存放路徑是: .$tmp_name. br/  echo 開始移動(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 alt=/ 圖片預(yù)覽:/r文件名: .$destination. /r上傳時(shí)間:/  }elseif ($error==1){  echo 超過了文件大小,在php.ini文件中設(shè)置  }elseif ($error==2){  echo 超過了文件的大小MAX_FILE_SIZE選項(xiàng)指定的值  }elseif ($error==3){  echo 文件只有部分被上傳  }elseif ($error==4){  echo 沒有文件被上傳  }else{  echo 上傳文件大小為0  }else{  echo 請上傳jpg,gif,png等格式的圖片! ? 

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

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,更多相關(guān)內(nèi)容請關(guān)注PHP !

相關(guān)推薦:

PHP生成不重復(fù)隨機(jī)數(shù)的方法匯總

PHP 頁面編碼聲明方法詳解(header或meta)

PHP循環(huán)遍歷數(shù)組的3種方法list()、each()和while總結(jié)

以上就是關(guān)于PHP的move_uploaded_file() 函數(shù)的解析的詳細(xì)內(nèi)容,PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 德兴市| 宁明县| 额尔古纳市| 多伦县| 扎囊县| 岳西县| 江西省| 麻阳| 天长市| 江永县| 平泉县| 大悟县| 兴山县| 乐东| 兴业县| 象州县| 阿瓦提县| 崇阳县| 调兵山市| 台中市| 钟祥市| 宜州市| 陇川县| 勃利县| 从化市| 鄂尔多斯市| 铜山县| 东源县| 陆良县| 郴州市| 通许县| 长寿区| 灵川县| 鄂托克前旗| 赣州市| 青海省| 七台河市| 松阳县| 双峰县| 若尔盖县| 吉林市|