PHP'de resimleri saklamak gerekebilir. Bu durumda genellikle resmin yolu veritabanında tutulur ve bu şekilde resim yolu saklanır. Ancak bu sorunlar çıkarabilir. Örneğin programı başka bir kullanıcı yüklediğinde resim dosyalarını da kopyalaması, hatta aynı dosya yoluna kopyalaması gerekir. Bu da oldukça sağlıksız bir yöntemdir.
Bu yazıda
image dosyalarının veritabanında nasıl saklanacağını anlatacağım.
Veritabanında resim tutabilmek için tabloda ilgili alan
blob veya
long blob olarak seçilmeli. Adından da anlaşılacağı üzere
long blob daha büyük dosyaları tutabiliyor.
NOT : resimupload.php - resimgoster.php ve siteler.sql dosyalarını yazının sonunda indirebilirsiniz.
Artık uygulamaya geçiyorum. Öncelikle bir tablo oluşturuyorum.
Şimdi yeni bir
php dosyası oluşturarak içine kodlarımı yazmaya başlıyorum. Veritabanına resim upload edeceğimiz için form içinde
File inputu ve
submit inputu eklemem gerekiyor. Aşağıdaki kodları ekliyorum.
<form action="resimupload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="image" /><br />
<input type="submit" name="submit" value="Yükle" />
</form>
Şimdi php kodlarını yazıyorum.
<?php
if(isset($_POST['submit']))
{
mysql_connect("localhost","root","");
mysql_select_db("blog");
$resim_adi = mysql_real_escape_string($_FILES["image"]["name"]);
$resim_veri = mysql_real_escape_string(file_get_contents($_FILES["image"]["tmp_name"]));
echo $resim_veri;
}
?>
Sayfayı çalıştırıyorum ve bir resim seçip Yükle butonuna tıklıyorum. Karşıma aşağıdaki gibi resmin kodları geliyor. Yapmam gereken bu kodu yani $resim_veri değişkenini blob türündeki tabloya kaydetmek.
Yukarıdaki kod yerine aşağıdakini yazıyorum. Böylece veritabanına resim ekleniyor.
<?php
if(isset($_POST['submit']))
{
mysql_connect("localhost","root","");
mysql_select_db("blog");
$resim_adi = mysql_real_escape_string($_FILES["image"]["name"]);
$resim_veri = mysql_real_escape_string(file_get_contents($_FILES["image"]["tmp_name"]));
$resim_turu = mysql_real_escape_string($_FILES["image"]["type"]);
if(substr($resim_turu,0,5) == "image")
{
mysql_query("insert into siteler(site_adi,resim) values('Google','$resim_veri')");
}
else
{
echo "Sadece resim yüklenebilir.";
}
}
?>
Eklenen resim tabloda aşağıdaki gibi gözüküyor.
Şimdi veritabanına eklediğimiz veriyi sayfada gösterelim. Yeni bir php sayfası oluşturuyorum. (resimgoster.php) Aşağıdaki kodları yazıyorum.
<?php
mysql_connect("localhost","root","");
mysql_select_db("blog");
if(isset($_GET['id']))
{
$id = mysql_real_escape_string($_GET['id']);
$sorgu = mysql_query("select * from siteler where id='$id'");
while($cek = mysql_fetch_assoc($sorgu))
{
$resim_veri = $cek["resim"];
}
header("content-type: image/png");
echo $resim_veri;
}
else
{
echo "Hata !!!";
}
?>
Son olarak ilk upload işleminin gerçekleştiği sayfaya giderek
<img src="resimgoster.php?id=5" />
satırını ekliyorum. Sayfayı çalıştırdığımda veritabanındaki resim gözükecektir.
İyi çalışmalar ...
Dosyalar (resimupload.php, resimgoster.php, siteler.sql)
Read More