成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

zhoutk / 2153人閱讀

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

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

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

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


上傳圖片

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

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

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

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

檢測文件上傳的大小

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

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

移動服務(wù)器臨時文件到指定目錄

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

/**
 * 獲取文件的擴展名
 * @param $filename:文件名
 * @return string 擴展名
 */
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:是否開啟驗證是否為真實圖片
 * @param int $maxSize:文件最大上傳大小
 * @param array $allowExt:允許的文件擴展名
 * @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"] . "非法文件類型";
        }
        //檢測是否為真實圖片
        if ($flag) {
            if (!getimagesize($fileInfo["tmp_name"])) {
                $res["mes"] = $fileInfo["name"] . "不是真實圖片";
            }
        }
        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 {
        //判斷錯誤信息
        switch ($fileInfo["error"]) {
            case 1:
                $res["mes"] = "上傳文件超過php配置文件中upload_max_filesize選項的值";
                break;
            case 2:
                $res["mes"] = "超過了表單MMAX_FILE_SIZE限制的大小";
                break;
            case 3:
                $res["mes"] = "文件部分被上傳";
                break;
            case 4:
                $res["mes"] = "沒有選擇上傳文件";
                break;
            case 6:
                $res["mes"] = "沒有找到臨時目錄";
                break;
            case 7:
                $res["msg"] = "文件寫入失敗";
                break;
            case 8:
                $res["mes"] = "系統(tǒng)錯誤";
                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));這句主要是因為上傳多文件時可能會有個別文件出錯而上傳失敗導(dǎo)致$uploadFiles[]中的某個值是空值,所以我們需要對其進(jìn)行過濾并賦值給一個新數(shù)組

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/22047.html

相關(guān)文章

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

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

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

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

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

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

    xavier 評論0 收藏0
  • PHP文件的上傳下載

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

    Flands 評論0 收藏0
  • Nextcloud個人云存儲絕佳選擇:一鍵自動安裝方法和云盤使用體驗

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

    Shisui 評論0 收藏0

發(fā)表評論

0條評論

zhoutk

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<