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

首頁(yè) > 編程 > PHP > 正文

php實(shí)現(xiàn)文件上傳與下載(中)

2020-03-22 18:21:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
  • 出現(xiàn)不想讓用戶看見(jiàn)的信息,可以使用錯(cuò)誤抑制符號(hào)@;當(dāng)然能echo的東西都是可以賦值給一個(gè)變量的;

    定義用戶上傳文件類(lèi)型,將其放在數(shù)組變量allowExt中,用if(!in_array(第一個(gè)參數(shù)為獲取上傳文件的后綴名,可以使用strtolower函數(shù)來(lái)判定 點(diǎn)號(hào)‘ .’之后的后綴名,或者也可以用自帶擴(kuò)展函數(shù)pathinfo(file的名字,PATHINFO_EXTENSION)來(lái)判定,第二個(gè)參數(shù)就是允許上傳的類(lèi)型的數(shù)組變量allowExt);但是這種情況下,用戶萬(wàn)一上傳上來(lái)一個(gè)病毒信息,只是改了后綴名,就要用到getimagesize來(lái)獲取圖片的信息,基本信息會(huì)有圖片的寬度和高度以及類(lèi)型,部分還會(huì)有channel和bits;如果允許用戶上傳的不僅僅是圖片類(lèi)型,則使用flag的布爾值進(jìn)行判定;

    還要注意的是用戶上傳的文件的命名,不能存在重名覆蓋現(xiàn)象,可以使用md5(uniqid(microtime(true),true))或類(lèi)似函數(shù)進(jìn)行判定;

    有的時(shí)候用戶需要上傳到自己的某個(gè)目錄下,則可以用if(!files_exit(path))進(jìn)行判定,不存在就用mkdir ($path,0777,true)來(lái)自定義上傳的路徑;

    在各種判定之后,可以將這個(gè)文件封裝成一個(gè)函數(shù),將下文中會(huì)使用到的變量設(shè)置為該函數(shù)的參數(shù),在調(diào)用時(shí)可以傳參,在單文件多文件上傳的時(shí)候可以直接調(diào)用函數(shù)即可,大大簡(jiǎn)化代碼量;

    單文件上傳基本思路也就是:先檢測(cè)錯(cuò)誤信息,一一匹配,用switch……case輸出對(duì)應(yīng)的錯(cuò)誤信息------》檢測(cè)文件上傳的類(lèi)型是否是自己定義的數(shù)組中的某一個(gè)-----》檢測(cè)上傳文件是否滿足規(guī)范中的大小要求----》檢測(cè)文件圖片等內(nèi)容是否是真實(shí)的圖片類(lèi)型等(用flag和getimagesize獲取信息)----》檢測(cè)文件是否通過(guò)http post方法傳上來(lái)的----》定義文件上傳進(jìn)來(lái)的名字和路徑(此時(shí)需要檢測(cè)路徑是否存在以及同名文件是否存在,采用加密方式重命名)---》上傳成功,返回具體的數(shù)組變量或者上傳文件名。

     1 <?php 2 header('content-type:text/html;charset=utf-8'); 3  4 function upload($fileInfo,$allowExt = array('jpeg', 'jpg',  'png',  'gif', 'pdf'), $maxSize = 2097152, $path = 'text', $flag = true) 5 { 6     $fileInfo = $_FILES['file1']; 7 //     $maxSize = 2097152; // 允許上傳的最大字節(jié)數(shù)2M 8     // $flag = true; // 檢測(cè)是否真實(shí)類(lèi)型 9      // 允許上傳的文件類(lèi)型,直接放在參數(shù)里了 10 //    $allowExt = array(11 //         'jpeg',12 //         'png',13 //         'png',14 //         'gif',15 //         'pdf'16 //     );17     if(!is_array($allowExt)){18         exit('系統(tǒng)錯(cuò)誤');19     }20     // 1、判斷錯(cuò)誤號(hào)21     if ($fileInfo['error'] == 0) {22         // 判斷上傳文件的大小23         if ($fileInfo['size'] > $maxSize) {24             exit('上傳文件過(guò)大');25         }26         // 判斷文件類(lèi)型:兩種方法--使用截取后綴名或者用自帶擴(kuò)展名的判定來(lái)判定27         $ext = pathinfo($fileInfo['name'], PATHINFO_EXTENSION);28         $ext = strtolower(end(explode('.', $fileInfo['name'])));29         if (! in_array($ext, $allowExt)) {30             exit('非法文件類(lèi)型');31         }32         // 判斷文件是否通過(guò)http post方式穿上的33         if (! is_uploaded_file($fileInfo['tmp_name'])) {34             exit('文件不是通過(guò)http post方法傳上來(lái)的');35         }36         if ($flag) {37             if (! getimagesize($fileInfo['tmp_name'])) {38                 exit('不是真正的圖片類(lèi)型');39             }40         }41         // 上傳文件,先判定路徑是否存在,如果不存在則建立42        // $path = 'text';43         if (! file_exists($path)) {44             mkdir($path, 0777, true);45             chmod($path, 0777);46         }47         48         // 要確保文件名唯一,防止重名產(chǎn)生覆蓋,使用加密函數(shù)md5,mcrotime表示微秒數(shù),兩個(gè)參數(shù)則為true;49         $uniName = md5(uniqid(microtime(true), true)) . '.' . $ext;50 //   測(cè)試是否可以加密輸出      echo $uniName;51 //         exit();52         $destination = $path . '/' . $uniName;53         if (move_uploaded_file($fileInfo['tmp_name'], $destination)) {54             // echo '上傳成功';可以不僅僅是顯示返回成功,可以返回文件的信息內(nèi)容等55 //             return array(56 //                 'newName' => $destination,57 //                 'size' => $fileInfo['size'],58 //                 'type' => $fileInfo['type']59 //             );60             return $destination;61             //如果只要一個(gè)文件名,則return $destination即可62         } else {63             echo '上傳失敗';64         }65     } else {66         // 匹配錯(cuò)誤信息,與err號(hào)應(yīng)該一一對(duì)應(yīng)的67         switch ($fileInfo['error']) {68             case 1:69                 $remindMes= '上傳文件超過(guò)了php配置文件中upload_max_filesize選項(xiàng)的值';70                 break;71             case 2:72                $remindMes= '上傳文件超過(guò)了表單max_file_size選項(xiàng)的值';73                 break;74             case 3:75                $remindMes=  '文件部分被上傳';76                 break;77             case 4:78                 $remindMes= '沒(méi)有選擇上傳文件';79                 break;80             case 6:81                 $remindMes=  '沒(méi)有找到臨時(shí)目錄';82                 break;83             case 7:84             85             case 8:86                $remindMes=  '系統(tǒng)錯(cuò)誤';87                 break;88         }89         exit($remindMes);90     }91 }

    也是參考了別人的指點(diǎn)的,哦呵呵,又練練手啦……

    PHP編程

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

  • 發(fā)表評(píng)論 共有條評(píng)論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 眉山市| 江油市| 延长县| 女性| 昌图县| 融水| 庆阳市| 五莲县| 乐亭县| 资中县| 司法| 全椒县| 神农架林区| 桂林市| 油尖旺区| 舞阳县| 宣恩县| 钟祥市| 遂昌县| 正定县| 墨玉县| 绥德县| 闽清县| 遵义市| 凤山市| 许昌市| 轮台县| 玛沁县| 左云县| 洪洞县| 梅河口市| 炉霍县| 临夏县| 左贡县| 洪雅县| 乌拉特前旗| 民勤县| 农安县| 丽江市| 景泰县| 丰县|