成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

php實(shí)現(xiàn)圖片上傳與下載

zhoutk / 2076人閱讀

摘要:本文接下來的內(nèi)容講的是如何通過實(shí)現(xiàn)圖片的上傳與下載構(gòu)建上傳文件前端頁面這里我借助前端框架以及圖標(biāo)庫,內(nèi)容很簡單就一個(gè)圖片上傳框以及一個(gè)提交按鈕,代碼如下上傳圖片上傳其中隱藏域主要是用來現(xiàn)在文件上傳大小的,設(shè)置為設(shè)置接收

本文接下來的內(nèi)容講的是如何通過php實(shí)現(xiàn)圖片的上傳與下載

構(gòu)建上傳文件前端頁面

這里我借助bootstrap前端框架以及fontawesome圖標(biāo)庫,內(nèi)容很簡單就一個(gè)圖片上傳框以及一個(gè)提交按鈕,代碼如下:


上傳圖片

其中:
隱藏域主要是用來現(xiàn)在文件上傳大小的,設(shè)置為2M=>2*1024*1024=>2097152
設(shè)置接收文件類型為圖片格式,可多張圖片上傳,注意name屬性值為file[]時(shí)服務(wù)器可接收多圖片

后臺(tái)服務(wù)器圖片上傳處理

文件從前端上傳到服務(wù)器之后,服務(wù)器得到上傳文件的信息之后進(jìn)行處理,主要包括以下幾點(diǎn):

首先圖片上傳有沒有錯(cuò)誤,如果沒有下一步,有則返回錯(cuò)誤信息

檢測文件上傳的大小

檢測文件類型,看是否為圖片類型

檢測是否為真實(shí)圖片類型,有些圖片可能是偽造的,比如我們把一個(gè)文本文件擴(kuò)展名修改成圖片類型,上述幾條照樣通過

移動(dòng)服務(wù)器臨時(shí)文件到指定目錄

針對(duì)2、3步有人可能會(huì)問,我們不是前端已經(jīng)在隱藏域中限制上傳大小了嘛,而且也設(shè)置了文件的接收類型,為什么服務(wù)器還要進(jìn)行驗(yàn)證呢?有句話是這么說的,服務(wù)器永遠(yuǎn)不要相信客戶端傳過來的數(shù)據(jù),有過編程經(jīng)驗(yàn)的人都知道,我們可以在瀏覽器修改前端的頁面結(jié)構(gòu)以及內(nèi)容,而且還可以偽造數(shù)據(jù),前端的驗(yàn)證只是起到過濾的作用,并不能一勞永逸,服務(wù)器還是得驗(yàn)證前臺(tái)傳過來的數(shù)據(jù)

接下來直接看代碼,處理文件上傳函數(shù)upload_fun.php:

 $val) {
                $files[$i]["name"] = $file["name"][$key];
                $files[$i]["type"] = $file["type"][$key];
                $files[$i]["tmp_name"] = $file["tmp_name"][$key];
                $files[$i]["error"] = $file["error"][$key];
                $files[$i]["size"] = $file["size"][$key];
                $i++;
            }
        }
    }
    return $files;
}

/**
 * 獲取文件的擴(kuò)展名
 * @param $filename:文件名
 * @return string 擴(kuò)展名
 */
function getExt($filename)
{
    return strtolower(pathinfo($filename, PATHINFO_EXTENSION));
}

/**
 * 生成唯一字符串作為文件名
 * @return string 唯一文件名
 */
function getUniName()
{
    return md5(uniqid(microtime(true), true));
}

/**
 * 上傳文件主處理模塊
 * @param $fileInfo:文件信息
 * @param string $path:上傳文件路徑
 * @param bool $flag:是否開啟驗(yàn)證是否為真實(shí)圖片
 * @param int $maxSize:文件最大上傳大小
 * @param array $allowExt:允許的文件擴(kuò)展名
 * @return array 信息
 */
function upload_file($fileInfo, $path = "./uploads", $flag = true, $maxSize = 2*1024 * 1024, $allowExt = ["jpeg", "jpg", "png", "gif"])
{
    $res = [];
    if ($fileInfo["error"] == UPLOAD_ERR_OK) {
        $ext = getExt($fileInfo["name"]);
        $uniName = getUniName();
        $dest = $path . "/" . $uniName . "." . $ext;
        //檢測上傳文件大小
        if ($fileInfo["size"] > $maxSize) {
            $res["msg"] = $fileInfo["name"] . "上傳文件過大";
        }
        //上傳文件類型
        if (!in_array($ext, $allowExt)) {
            $res["msg"] = $fileInfo["name"] . "非法文件類型";
        }
        //檢測是否為真實(shí)圖片
        if ($flag) {
            if (!getimagesize($fileInfo["tmp_name"])) {
                $res["mes"] = $fileInfo["name"] . "不是真實(shí)圖片";
            }
        }
        if ($res) return $res;
        if (!file_exists($path)) {
            mkdir($path, 0777, true);
        }
        if (!@move_uploaded_file($fileInfo["tmp_name"], $dest)) {
            $res["msg"] = $fileInfo["name"] . "文件上傳失敗";
        } else {
            $res["msg"] = $fileInfo["name"] . "文件上傳成功";
            $res["dest"] = $dest;
        }
        return $res;
    } else {
        //判斷錯(cuò)誤信息
        switch ($fileInfo["error"]) {
            case 1:
                $res["mes"] = "上傳文件超過php配置文件中upload_max_filesize選項(xiàng)的值";
                break;
            case 2:
                $res["mes"] = "超過了表單MMAX_FILE_SIZE限制的大小";
                break;
            case 3:
                $res["mes"] = "文件部分被上傳";
                break;
            case 4:
                $res["mes"] = "沒有選擇上傳文件";
                break;
            case 6:
                $res["mes"] = "沒有找到臨時(shí)目錄";
                break;
            case 7:
                $res["msg"] = "文件寫入失敗";
                break;
            case 8:
                $res["mes"] = "系統(tǒng)錯(cuò)誤";
                break;
        }
        return $res;
    }
}

服務(wù)器接收上傳文件調(diào)用處理文件上傳函數(shù)upload_fun.php進(jìn)行處理:

";
    $uploadFiles[] = $res["dest"];
}
$uploadFiles = array_values(array_filter($uploadFiles));
print_r($uploadFiles);

$uploadFiles = array_values(array_filter($uploadFiles));這句主要是因?yàn)樯蟼鞫辔募r(shí)可能會(huì)有個(gè)別文件出錯(cuò)而上傳失敗導(dǎo)致$uploadFiles[]中的某個(gè)值是空值,所以我們需要對(duì)其進(jìn)行過濾并賦值給一個(gè)新數(shù)組

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22047.html

相關(guān)文章

  • 開箱即用-簡潔實(shí)用的ImgURL圖床相冊(cè)程序和Zdir目錄列表程序(文件管理器)

    摘要:本篇文章就來分享一下兩款開箱即用上手容易的圖床相冊(cè)程序和在線文件管理器目錄列表程序,由好友開發(fā)并維護(hù),非常適合個(gè)人站長用作圖床相冊(cè)和文件下載分享。雖然說現(xiàn)在照片還有文件存儲(chǔ)等都可以上傳到網(wǎng)盤中,但是國內(nèi)的網(wǎng)盤與國外的網(wǎng)盤存儲(chǔ)還有點(diǎn)不一樣。以百度網(wǎng)盤與Dropbox對(duì)比為例,百度網(wǎng)盤頂多算是一個(gè)個(gè)人用來存放私人照片和文件的網(wǎng)絡(luò)硬盤,如果用來分享的話很容易被百度限制或者取消下載。很多的個(gè)人站長為...

    番茄西紅柿 評(píng)論0 收藏2637
  • PHP上傳圖片的路徑保存在數(shù)據(jù)庫中,根據(jù)圖片路徑顯示圖片

    摘要:鑒于上一篇上傳圖片到數(shù)據(jù)庫并可以進(jìn)行顯示鏈接描述有筆友提出了改進(jìn)意見,下面這篇文章就是采納改進(jìn)意見進(jìn)行修改的另外一種方案。結(jié)語本人剛接觸不久,自知能力不夠水平有限,該文中若存在什么不足或需改進(jìn)之處還請(qǐng)大家多多指正。 鑒于上一篇《PHP上傳圖片到數(shù)據(jù)庫并可以進(jìn)行顯示》鏈接描述有筆友提出了改進(jìn)意見,下面這篇文章就是采納改進(jìn)意見進(jìn)行修改的另外一種方案。 1、創(chuàng)建數(shù)據(jù)表 CREATE TABL...

    geekidentity 評(píng)論0 收藏0
  • Ueditor結(jié)合七牛云存儲(chǔ)上傳圖片、附件和圖片在線管理的實(shí)現(xiàn)和最新更新

    摘要:版本修復(fù)提供多文件上傳,解決了以前不能多文件上傳問題,最大上傳圖片張,最大上傳附件,如果感覺時(shí)間不足可修改中的時(shí)間,現(xiàn)在是修復(fù)了文件同名上傳失敗的問題,解決方案是同名上傳覆蓋,即的方式修復(fù)了丟失的問題修改了上一版執(zhí)行安全漏洞還有個(gè)小就是上傳 1.0版本修復(fù)bug 提供多文件上傳,解決了以前不能多文件上傳問題,最大上傳圖片32張,最大上傳附件10,如果感覺時(shí)間不足可修改getToke...

    xavier 評(píng)論0 收藏0
  • PHP文件的上傳下載

    一、文件上傳的html與PHP注意事項(xiàng)1.form要設(shè)定enctype屬性,method設(shè)置為post。enctype設(shè)置為multipart/form-data后,圖片上傳信息會(huì)被列入$_FILES超全局?jǐn)?shù)組,而非$_POST,從而達(dá)到真正的上傳目的2.設(shè)定隱藏input:表示最大上傳空間3.PHP配置文件的設(shè)置:showImg(https://segmentfault.com/img/bVTJ...

    Flands 評(píng)論0 收藏0
  • Nextcloud個(gè)人云存儲(chǔ)絕佳選擇:一鍵自動(dòng)安裝方法和云盤使用體驗(yàn)

    搭建個(gè)人云存儲(chǔ)一般會(huì)想到ownCloud,堪稱是自建云存儲(chǔ)服務(wù)的經(jīng)典。而Nextcloud是ownCloud原開發(fā)團(tuán)隊(duì)打造的號(hào)稱是下一代存儲(chǔ)。初一看覺得口氣不小,剛推出來就重新定義了Cloud,真正試用過后就由衷地贊同這個(gè)Nextcloud:它是個(gè)人云存儲(chǔ)服務(wù)的絕佳選擇。 與ownCloud相比,Nextcloud的功能絲毫沒有減弱,甚至由于可以安裝云存儲(chǔ)服務(wù)應(yīng)用,自制性更強(qiáng),也更符合用戶的...

    Shisui 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<