|

PHP ile BLOB Verisi Halindeki Resmi Almak



alicangonullu tarafından 2022-02-05 01:45:38 tarihinde yazıldı. Tahmini okunma süresi 4 dakika, 33 saniye. 178 kere görüntülendi.




Disclaimer


The information provided in this blog post is intended for educational and informational purposes only. It is not intended to encourage or promote any illegal or unethical activities, including hacking, cyberattacks, or any form of unauthorized access to computer systems, networks, or data.

Yasal Uyarı
Bu blog yazısında sağlanan bilgiler yalnızca eğitim ve bilgilendirme amaçlıdır. Bilgisayar korsanlığı, siber saldırılar veya bilgisayar sistemlerine, ağlara veya verilere herhangi bir şekilde yetkisiz erişim de dahil olmak üzere herhangi bir yasa dışı veya etik olmayan faaliyeti teşvik etme veya reklamlama amacı taşımaz.
Yasal bilgiler için yasal sayfasını inceleyebilirsiniz .

BLOB verisi, veritabana BASE64 formatında depolanan verilere verilen addır. Bu benim kişisel blogumda olduğu gibi bir resim dosyası olabilir. Ben bu yazımda örnek olarak bir resim verisini veritabandan getirteceğim.

Ancak önceden uyarmak isterim çok büyük trafiğe sahip sitelerde kullanmanız büyük bir performans kaybına yol açabilmektedir. Eğer MySQL yerine kısaca Big Data destekleyen bir SQL programı kullanıyorsanız bu tip programlar muhtemelen performans kaybınızı düşürecektir

Öncelikle veritabandan gerekli veritabanı şu komutla halledelim.

CREATE TABLE `resim_tablo` ( `id` int(11) NOT NULL, `title` varchar(64) CHARACTER SET utf8 NOT NULL, `mime` varchar(255) CHARACTER SET utf8 NOT NULL, `time` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `veri` mediumblob NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

Ardından kodumuzu SQL bağlantısı ile beraber yazmaya başlayalım.

Ben projeyi iki class olarak planladım. Birincisi veritaban bağlantısının yapılacağı kütüphane olacak. Burada veritaban bilgilerini define() olarak tanımladım ve SQL bağlantısını kurdum.

define("DB_HOST", "localhost");
define("DB_NAME", "resimdb");
define("DB_USER", "root");
define("DB_PASS", "1234");

class VTConn {
private $con; 

public function connect(){
$this->con = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if(mysqli_connect_errno()){
echo 'Failed to connect with database'. mysqli_connect_error();
return null; 
}
return $this->con; 
}	
}

SQL bağlantısını kurduktan sonra ben yüklediğim dosyanın MIME tipini ve içeriğini almak için bir class açtım.

class ResimGetir { 
}

 

Ardından class içerisine diğer class bölümünde açtığım SQL bağlantısını entegre ediyorum.

define("DB_HOST", "localhost");
define("DB_NAME", "resimdb");
define("DB_USER", "root");
define("DB_PASS", "1234");

class VTConn {
private $con; 

public function connect(){
$this->con = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if(mysqli_connect_errno()){
echo 'Failed to connect with database'. mysqli_connect_error();
return null; 
}
return $this->con; 
}	
}

class ResimGetir {
private $con; 
public function __construct() {
$db = new VTConn; 
$this->con = $db->connect();
}
}

Ben bu şekilde sağladım. Siz farklı şekillerde sağlayabilirsiniz.

Bağlantı sorunsuz çalıştıktan sonra resim içeriğini getirme kısmını yazıyorum. Burada getirilen veriyi print edecek fonksiyonu class içerisine yazıyorum

define("DB_HOST", "localhost");
define("DB_NAME", "resimdb");
define("DB_USER", "root");
define("DB_PASS", "1234");

class VTConn {
private $con; 

public function connect(){
$this->con = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if(mysqli_connect_errno()){
echo 'Failed to connect with database'. mysqli_connect_error();
return null; 
}
return $this->con; 
}	
}

class ResimGetir {
private $con; 
public function __construct() {
$db = new VTConn; 
$this->con = $db->connect();
}
public function ResimImage($imageid){
$stmt = $this->con->prepare("SELECT veri FROM resim_tablo WHERE id = ?");
$stmt->bind_param("i", $imageid);
$stmt->execute();
$stmt->bind_result($image);
$stmt->fetch();
return $image; 
}
}

Resim içeriğini getirdikten sonrasında ise ekrana yansıdığında bir imaj olarak görünmesi için MIME tipini getirteceğim.

define("DB_HOST", "localhost");
define("DB_NAME", "resimdb");
define("DB_USER", "root");
define("DB_PASS", "1234");

class VTConn {
private $con; 

public function connect(){
$this->con = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if(mysqli_connect_errno()){
echo 'Failed to connect with database'. mysqli_connect_error();
return null; 
}
return $this->con; 
}	
}

class ResimGetir {
private $con; 
public function __construct() {
$db = new VTConn; 
$this->con = $db->connect();
}
public function ResimImage($imageid){
$stmt = $this->con->prepare("SELECT veri FROM resim_tablo WHERE id = ?");
$stmt->bind_param("i", $imageid);
$stmt->execute();
$stmt->bind_result($image);
$stmt->fetch();
return $image; 
}

public function ResimMime($extid){
$stmt = $this->con->prepare("SELECT mime FROM resim_tablo WHERE id = ?");
$stmt->bind_param("i", $extid);
$stmt->execute(); 
echo header('content-type: '.$ext.'');
$stmt->fetch();
return $ext; 
}
}

Tüm fonksiyon tamamlandığına göre artık verilerin query işlemlerini yapma zamanı geldi. Burada artık kodu tamamlıyoruz ve ilk çıktımızı alıyoruz.

define("DB_HOST", "localhost");
define("DB_NAME", "resimdb");
define("DB_USER", "root");
define("DB_PASS", "1234");

class VTConn {
private $con; 

public function connect(){
$this->con = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if(mysqli_connect_errno()){
echo 'Failed to connect with database'. mysqli_connect_error();
return null; 
}
return $this->con; 
}	
}

class ResimGetir {
private $con; 
public function __construct() {
$db = new VTConn; 
$this->con = $db->connect();
}
public function ResimImage($imageid){
$stmt = $this->con->prepare("SELECT veri FROM resim_tablo WHERE id = ?");
$stmt->bind_param("i", $imageid);
$stmt->execute();
$stmt->bind_result($image);
$stmt->fetch();
return $image; 
}

public function ResimMime($extid){
$stmt = $this->con->prepare("SELECT mime FROM resim_tablo WHERE id = ?");
$stmt->bind_param("i", $extid);
$stmt->execute(); 
echo header('content-type: '.$ext.'');
$stmt->fetch();
return $ext; 
}
}
if(isset($_GET['g'])){
$img = new ResimGetir();
echo $img->ResimMime($_GET['g']);
echo $img->ResimImage($_GET['g']);
} else {
}

Burada ekrana resim veya belge yansıyacaktır.

Okuduğunuz için teşekkürler!