PHP ile Dosyalari Veritabaninda Saklamak
onceki yazimda PHP ile form kullanarak nasil upload yapabileceginizi gostermistim. Simdi o konuyu bir adim ileriye tasimak istiyorum. Bu yazimda PHP ile formdan gelen dosyayi nasil veritabaninda saklariz sorusunun cevabini verecegim.

Eger onceki yaziyi okumussaniz asagida verecegim kodu zaten biliyorsunuz eger okumadiysaniz da cok onemli degil biraz inceleyerek cozebileceginizi dusunuyorum.

if (isset($_FILES['dosya'])) //formdaki field in adinin dosya oldugunu varsaydim sizde farkliysa bu bolumu degistirmeniz gerekebilir.
{
$file = $_FILES['dosya'];
if ($file['error'] == UPLOAD_ERR_OK)
{
$name = md5(uniqid(mt_rand().time(),true));
$pathInfo = pathinfo($file['name']);
if (isset($pathInfo['extension']))
$name .= '.'.$pathInfo['extension'];
$uploaddir="./temp/";
if (move_uploaded_file($file['tmp_name'], $uploaddir.$name))
{
echo "Upload basarili";
}
else
{
die("Dosya yuklenemedi..");
}
}
}


Bu kodun oncesinde bir veritabani baglantisi yapmis oldugunuzu varsayarak devam edecegim. Koddaki echo "Upload basarili"; kismini asagida verecegim kodu ile degistirerek dosyayi veritabanina yerlestirecegiz.

$di = fopen ($uploaddir.$name, "r");
if (!$di)
{
die("Dosya yuklenemedi..");

}
else
{
$dicerik = fread ($di, $boyut);
fclose ($di);
$encdosya=base64_encode($dicerik);
$sqldosya="INSERT INTO `tablo_adi` VALUES ('', '".$encdosya."')";
mysql_query($sqldosya);
unlink($name);
echo "Dosya basariyla yuklendi"; //veya header("Location: panel.php"); gibi bir sey yapilabilir
}


Mantik gayet basit dosyayi fread fonksiyonu ile okuduktan sonra base64_encode ile metin olarak encode ediyoruz ve veritabanina giriyoruz. Dosyayi tekrar kullanmak istedigimizde ise veritabanindan veriyi cekip base64_decode edecegiz. MySQL de TEXT, MEDIUMTEXT veya LONGTEXT tipinde bir alanda saklama yapabilirsiniz bu tamamen maksimum dosya boyutunuza bagli. Gercek hayattan ornek vermek gerekirse download.php gibi bir uygulama yapmak isterseniz dosyanin mime-type dedigimiz dosya tipini ve dosya boyutu gibi bilgileri icin de MySQL de alan olusturup oralarda tutmaniz gerekir ki tarayiciyi dosyayi download etmeye zorlarken header olarak bilgileri gonderebilesiniz. Bu bilgileri gondermediginiz takdirde tarayici dosyanin tipini ve dosya boyutunu bilemez ve dosya indirilirken 1.54 mb of unknown yani bilinmeyen dosya boyutunun 1.54 mb i indirildi gibi hos gorunmeyen download pencereleri olusur.
June 19, 2009
Ozgun Sari
PHP
6 yorum