php文件上傳blob(php文件上傳漏洞修復)

本文目錄一覽:

php 如何不用點擊上傳按鈕只通過文件路勁就可以上傳?

很麻煩,實際上瀏覽器沒有直接操作系統文件的許可權,這是一段從stackoverflow摘錄的代碼可以將文件轉為Blob對象的代碼,之後可以用ajax將對象發到服務上。

script

var getFileBlob = function (url, cb) {

        var xhr = new XMLHttpRequest();

        xhr.open(“GET”, url);

        xhr.responseType = “blob”;

        xhr.addEventListener(‘load’, function() {

            cb(xhr.response);

        });

        xhr.send();

};

var blobToFile = function (blob, name) {

        blob.lastModifiedDate = new Date();

        blob.name = name;

        return blob;

};

var getFileObject = function(filePathOrUrl, cb) {

       getFileBlob(filePathOrUrl, function (blob) {

          cb(blobToFile(blob, ‘test.jpg’));

       });

};

getFileObject(‘1.txt’, function (fileObject) {

     console.log(fileObject);

}); 

/script

php如何將BLOB類型的數據存儲到伺服器上

blob是一個對象容器,只能由js自身讀取並作為二進位數據流上傳至伺服器。

這種你得修改js代碼建立一個blob上傳至後台,然後後台再用腳本接收並儲存為文件。

php如何實現文件上傳

所謂上傳就是把文件從你電腦本地複製到你的項目指定文件夾下。

但這有個中間過程,就是複製到系統指定的臨時文件夾生成臨時文件。

然後將臨時文件複製到你指定的文件夾下。

剩下的就是各種驗證了。

給你個圖片上傳方法

//上傳一張圖片

$pic = $_FILES[‘pic’];

function upload($pic){

$tmp_name = $pic[‘tmp_name’];

$name = $pic[‘name’];

$type = $pic[‘type’];

$size = $pic[‘size’];

if(!is_uploaded_file($tmp_name)) exit(‘不是上傳文件’);

//判斷是否是圖片

$mine = array(‘image/png’,’image/jpg’,’image/gif’,’image/jpeg’);

if(!in_array($type,$mine)) exit(‘圖片格式不正確’);

//判斷是否有錯誤碼

$error = $pic[‘error’];

switch ($error) {

case 1:

exit(“超出上傳文件的最大限制”);

case 2:

exit(“超出了指定的文件大小”);

case 3:

exit(“只有部分文件被上傳”);

case 4:

exit(“文件沒有被上傳”);

case 6:

exit(“找不到臨時文件夾”);

case 7:

exit(“文件寫入失敗”);

}

echo “================br/”;

echo “上傳文件名稱是:”.$name.”br/”;

echo “上傳文件類型是:”.$type.”br/”;

echo “上傳文件大小是:”.$size.”br/”;

echo “上傳後系統返回的值是:”.$error.”br/”;

echo “上傳文件的臨時存放路徑是:”.$tmp_name.”br/”;

echo”開始移動臨時文件”.’br’;

$des_name = ‘up/’.mt_rand().time().’.’.basename($type);

$res = move_uploaded_file($tmp_name, $des_name);

if($res){

echo “================br/”;

echo “上傳圖片成功”.’br’;

}

}

ajax發送給php 圖片鏈接是blob php端怎麼獲取這個圖片

你在PHP裡邊列印一下 $_FILES 就明白了。

在表單加這個 enctype=”multipart/form-data” 不要編碼

form action=”upload.php” method=”post” enctype=”multipart/form-data”

!–file定義輸入欄位和 “瀏覽”按鈕,供文件上傳。–

   input type=”file” name=”file” onchange=”PreviewImage(this,’imgHeadPhoto’,’divPreview’);” size=”20″ /

   input  type=”submit” value=”上傳”/

/form

怎樣用php實現上傳圖片到資料庫

php實現上傳圖片保存到資料庫的方法。具體分析如下:

php 上傳圖片,一般都使用move_uploaded_file方法保存在伺服器上。但如果一個網站有多台伺服器,就需要把圖片發布到所有的伺服器上才能正常使用(使用圖片伺服器的除外)

如果把圖片數據保存到資料庫中,多台伺服器間可以實現文件共享,節省空間。

首先圖片文件是二進位數據,所以需要把二進位數據保存在mysql資料庫。

mysql資料庫提供了BLOB類型用於存儲大量數據,BLOB是一個二進位對象,能容納不同大小的數據。

BLOB類型有以下四種,除存儲的最大信息量不同外,其他都是一樣的。可根據需要使用不同的類型。

TinyBlob       最大 255B

Blob              最大 65K

MediumBlob  最大 16M

LongBlob      最大 4G

數據表photo,用於保存圖片數據,結構如下:

CREATE TABLE `photo` (  

  `id` int(10) unsigned NOT NULL auto_increment,  

  `type` varchar(100) NOT NULL,  

  `binarydata` mediumblob NOT NULL,  

  PRIMARY KEY  (`id`)  

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

upload_image_todb.php代碼如下:

?php  

// 連接資料庫  

$conn=@mysql_connect(“localhost”,”root”,””)  or die(mysql_error());  

@mysql_select_db(‘demo’,$conn) or die(mysql_error()); // 判斷action  

$action = isset($_REQUEST[‘action’])? $_REQUEST[‘action’] : ”; 

// 上傳圖片  

if($action==’add’){  

    $image = mysql_escape_string(file_get_contents($_FILES[‘photo’][‘tmp_name’]));  

    $type = $_FILES[‘photo’][‘type’];  

    $sqlstr = “insert into photo(type,binarydata) values(‘”.$type.”‘,'”.$image.”‘)”;  

    @mysql_query($sqlstr) or die(mysql_error());  

    header(‘location:upload_image_todb.php’);  

    exit();  

// 顯示圖片  

}elseif($action==’show’){  

    $id = isset($_GET[‘id’])? intval($_GET[‘id’]) : 0;  

    $sqlstr = “select * from photo where id=$id”;  

    $query = mysql_query($sqlstr) or die(mysql_error());  

    $thread = mysql_fetch_assoc($query);  

    if($thread){  

        header(‘content-type:’.$thread[‘type’]);  

        echo $thread[‘binarydata’];  

        exit();  

    }  

}else{  

// 顯示圖片列表及上傳表單  

?  

!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “”  

html  

 head  

  meta http-equiv=”content-type” content=”text/html; charset=utf-8″  

  title upload image to db demo /title  

 /head  

  

 body  

  form name=”form1″ method=”post” action=”upload_image_todb.php” enctype=”multipart/form-data”  

  p圖片:input type=”file” name=”photo”/p  

  pinput type=”hidden” name=”action” value=”add”input type=”submit” name=”b1″ value=”提交”/p  

  /form  

  

?php  

    $sqlstr = “select * from photo order by id desc”;  

    $query = mysql_query($sqlstr) or die(mysql_error());  

    $result = array();  

    while($thread=mysql_fetch_assoc($query)){  

        $result[] = $thread;  

    }  

    foreach($result as $val){  

        echo ‘pimg 

src=”upload_image_todb.php?action=showid=’.$val[‘id’].’t=’.time().'”

 width=”150″/p’;  

    }  

?  

/body  

/html  

?php  

}  

?

程序運行截圖和資料庫截圖:

原創文章,作者:Q31VD,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/128597.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
Q31VD的頭像Q31VD
上一篇 2024-10-03 23:25
下一篇 2024-10-03 23:25

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • 使用 DRF 實現文件上傳

    文件上傳是 web 應用程序中最常見的需求之一,本文將介紹如何使用 Django Rest Framework (DRF) 來實現文件上傳。通過本文,你將學習到如何使用 DRF 中…

    編程 2025-04-28
  • Treck TCP/IP Stack 輸入驗證錯誤漏洞CVE-2020-11901解析

    本文將對Treck TCP/IP Stack 輸入驗證錯誤漏洞CVE-2020-11901進行詳細解析,並提供相關代碼示例。 一、漏洞背景 Treck TCP/IP Stack是一…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • Python漏洞挖掘全指南

    本文將從多個方面詳細闡述Python漏洞挖掘的相關知識,幫助開發工程師了解並掌握漏洞挖掘的基礎知識和實戰技巧。 一、漏洞類型 漏洞是指誤用或設計上的錯誤,可導致產品、應用或系統中存…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • Coremail 漏洞詳解

    Coremail是國內主流的企業郵件伺服器軟體,2018年曝出多個漏洞。本文將詳細闡述Coremail漏洞的危害,漏洞種類和利用方法。同時提供完整的代碼示例,幫助讀者更加深入地了解…

    編程 2025-04-25

發表回復

登錄後才能評論