code1. Adım : Sunucuya dosya göndermek
Sunucuya dosya gönderebilmek için gerekli input tipi file dır. yani,

<input type=”file” name=”dosya”>

yazdığımız anda, bize göz at penceresi sunacaktır. Ancak dosyanın sunucuya ulaşabilmesi için, form tagına – enctype=”multipart/form-data” – eklenmelidir. yani örnek bir form oluşturacak olursak;

<form name=”yuklemeformu” method=”post”  action=”yukleme.php” enctype=”multipart/form-data”>
<input type=”file” name=”dosya”>
<br>
<input type=”submit” name=”Gönder”>
</form>

işte sadece html kullanarak yaptığımız form ve doğru bir action adresi, sunucuya dosya yollamamız için yeterlidir. artık formu dolurduğunuzda, istediğiniz dosya, ekstra bir işleme gerek kalmadan sunucunuzn geçici klasörüne atılacaktır.

2. Adım : Geçici klasörde bulunan dosyalarla çalışmak.
Şimdi action gönderdiğimiz, yukleme.php yi kodlamaya başlayalım. Öncelikle dosyanın geçici klasöre gittiğinden emin olalım.

if(empty($_FILES[‘resim’][‘tmp_name’]))
die(“Dosya yüklenemedi”);

Artık dosyanın sunucuda olduğunu varsayarak devam ediyoruz ve madem ki diyoruz, yüklediğimiz dosya bir resim dosyası idi, bilgilerini alalaım diyoruz.

$bilgi = getimagesize($_FILES[‘resim’][‘tmp_name’]);
// resim bilgilerini alan komut
$genislik=intval($bilgi[‘0’]);
$yukseklik=intval($bilgi[‘1’]);
$uzanti=$bilgi[‘mime’];
if ($genislik==0)
die(“Yükleme çalıştığınız dosya bir resim değil!!!”);

Değişken isimlerinden de anlayacağınız gibi, dosyanın uzanti, genislik ve yükseklik bilgilerini getimagesize fonksiyonu ile aldım. Siteler genel de sayfa genişlemesinden şikayetçi olurlar. o halde biz de belirli bir limit koylaım genişlik için.

if ($genislik>$maxgenislik){
$oran=$genislik/$maxgenislik;
$yenigenislik=$maxgenislik;
$yeniyukseklik=$yukseklik/$oran;
} else {
$yenigenislik=$genislik;
$yeniyukseklik=$yukseklik;
}

Eğer bulduğumuz genişlik, bizim maxgenislik olarak belirlediğimiz değerden daha yüksekse, elimizdeki genişliği, maksimum genişliğe böl, elde ettiğimiz sayıyı, katsayı kabul et ve yüksekliği bu katsayıya bölerek yeni yükseklik değerini bul. Bu saye de resim ebatlarını bozmamış oluyoruz. Şimdi de resim işlemlerine başlayalım. Öncelikle,

$kaynak=imagecreatefromjpeg(($_FILES[‘resim’][‘tmp_name’]);

// text halinde görünen dosyayı resim haline getirdik ve kaynak değişkenine atadık (UYARI: sadece jpeg uzantısı için)

$hedef= imagecreatetruecolor($yenigenislik,$yeniyukseklik);

// yeni hesapladığımız ebatlarda boş bir resim sayfası oluşturduk (NOT: FOTOĞRAF GİBİ GERÇEK RENKLERİ DE DESTEKLER)

imagecopyresized($hedef, $kaynak, 0, 0, 0, 0, $yenigenislik, $yeniyukseklik, $genislik, $yukseklik);

// hedefteki dosyayı 0 a 0 koordinatlarından alıp, yeni ebatlara göre, hedefteki resime 0a 0 koordinatlarından koydurduk.

Artık hedef değeri istediğimiz kıvama geldi. Şimdi de üzerine yazı ekleyelim
$metin_rengi = imagecolorallocate($hedef, 239, 11, 12); // bu numaralı değiştirebilirsinz, kırmızı rengidir bu
$font=imageloadfont(“font.gdf”); // eğer fontunuz var ise bu şekilde linux fontu yükleyebilirsiniz. (NOT: sunucum da true type font desteği olmadığı için bunu kullandım)
$font=4; // eğer font kullanmıyor ya da kullanamıyorsanız bu satırı kullanın. 4 büyüklüktür, değiştirebilirsiniz.
$x=0; // yazıyı yazmaya başlayacağım x koordinatı
$y=0; // yazıyı yazmaya başlayacağım y koordinatı
$yazi=”SEYRANLI”;
imagestring($hedef ,$font, $x,$y, $yazi, $metin_rengi);
// bu satırla beraber yazıyı resime eklemiş bulunuyoruz.
ob_start();
// verileri tampona alıyorum
Imagejpeg($hedef);
// resim oluşturuyorum
$resim=ob_get_contents();
// şu ana kadar tamponda tuttuğum ekran çıktılarını, resim değişkenine alıyorum
ob_end_clean();
// tamponu boşaltıyorum
imagedestroy($hedef);
// özel ebatlarda hazırladğımız, içine resmi yerleştirdiğimiz ve yazımızı eklediğimiz resim dosyası ile işimiz bitti, imha ediyoruz :)

3. Adım : Değişkendeki resmi kaydetme

Bütün işlemlerimizi yaptığımıza göre, dosyamızı kaydedip içimizi rahatlatmamız lazım.
önümüzde iki seçenek var,
1. resmi ftp ye kaydetmek
2. resmi veritabanına kaydetmek

resmi ftp ye kaydetmek:
Resmi ftp ye kaydedebilmeniz için, bir klasöre chmod 777(yazma izni) vermelisiniz. Bunu ftp programları ile yapabieceğiniz gibi, dosya içerisinden de yapabilrisiniz.

$ftp_kullanici =’seyranli’;
$ftp_sifre = ‘123456’;
$ftp_dosya = ‘/public_html/resimler’;
$ftp_server = ‘ftp.seyranli.com’;
$conn_id = ftp_connect($ftp_server);
// ftp ye bağlantısı açtık
$login_result = ftp_login($conn_id, $ftp_kullanici, $ftp_sifre);
// ftp ye kullanıcı girişi yaptık
@ftp_site($conn_id, ‘CHMOD 777 ‘ . $ftp_dosya);

Bu komutlarla dosyaya chmod 777 yani yazma izni verdik. şimdi resmimizi kaydedelim.

$dosya_adi=time().’.jpeg’;
// zamana göre dosya adı belirledik
$dosya = fopen($dosya_adi, ‘w’);
// içine kayıt yapmak üzere yeni bir dosya oluşturduk
@fwrite($dosya, $resim);
// dosya içine resim değişkenindeki bilgileri yazdırdık
@fclose($dosya);
// dosyayı kapattık
@ftp_site($conn_id, ‘CHMOD 755 ‘ . $ftp_user_root);
// klasörün yazma iznini tekrar iptal ettik
@ftp_close($conn_id);
// ftp oturumumuzu ve bağlantımızı sona erdirdik

İşte böylece resmi ftp ye atmış olduk. şimdi veritabanına kaydetmeye bakalım

Resmi veri tabanına kaydetmek.
Elimizde hala resim değişkeni içinde, resmin text hali var. bir resim dosyasını notepad tarzı programlarla açarsanız, resmin text halinden kastımı daha iyi anlarsınız. Ben bu hali veritabanına atmak istiyorum.
öncelikle bir veritabanı hazırlıyoruz.

CREATE TABLE resimler (
id int(5) NOT NULL auto_increment,
resim mediumblob NOT NULL,
PRIMARY KEY (id)
);

veritabanını hazırladığımıza göre içeriye resimleri atalım şimdi.

$resim = chunk_split(base64_encode($resim));
değişkeni base64 ile encode edip, ufak parçalara böldüm.
$sorgu = mysql_query(“INSERT INTO resimler VALUES(”,’$resim’)”);
// resmi veritabanına kaydetme kodunu da yazdık. şimdi bakalım kaydediyormu
if(mysql_affected_rows() > 0){
$numara=mysql_insert_id();
// auto_increment seçtiğimiz id yi biz vermediğimiz için, hangi id ile eklendiyse onu alıyoruz.
echo “Resim başarıyla eklendi”;
echo ‘<br><br>Forum linki<br> <input size=150 type=text readonly=1 value=”[img]http://www.seyranli.com/resim.php?id=’ . $numara . ‘[/img]”>’;
echo “<br><br>Html linki<br> <input size= 150 type=text readonly=1 value=’&lt;img src=”http://www.seyranli.com/resim.php?id=$numara”&gt;’>”;
echo ‘<br><br>Tam konumu<br> <input size=150 type=text readonly=1 value=”http://www.seyranli.com/resim.php?id=’ . $numara . ‘”>’;
} else
echo ‘Resim Veritabanına Eklenemedi’;

Linklerde de göründüğü gibi bir resim.php dosyasından bahsediyoruz, o halde bir de o dosyayı oluşturalım.

$id=intval($_GET[id]);
// resim.php?id=78 cinsindeki linklerden id değerini değişkene aldık
$sql = “SELECT resim FROM resimler where id='”.$id.”‘” ;
$sorgu = mysql_query ($sql);
// id 78 olan resmi aradık
if (mysql_num_rows($sorgu)>0) {
$row = mysql_fetch_array ($sorgu);
// bulduğu taktir de row adlı bir diziye sonuç aktardık
$resim = base64_decode($row[“resim”]);
// şu an zaten tek elemanlı bir dizi de olsak da, diziden resim alanını aldık, ve base64 e göre encode olduğundan, tekrar çözdük.
Header (“Content-type: images/jpeg”);
// sayfanın bir resim olduğunu belirttik
echo $resim;
// sonunda resmi ekrana yazdırdık
}
mysql_free_result($sorgu);
// mysql in tampon belleğinden sorgumuza dair olan verileri temizlettirdik.

Umarım İşinize yarar.
05 Ocak 2008 Cumartesi
Gündüz Can YILMAZ – ceviz.net

Bir Cevap Yazın