Reklam

Reklamlar

12 Haziran 2010 Cumartesi

Upload edilen resmi Veritabanına kaydettirmek

Adım : Sunucuya dosya göndermek
    Sunucuya dosya gönderebilmek için gerekli input tipi file dır. yani,
   
       
       
    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;
   
       

       
       

       
       

   
    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 "

Forum linki
";
                echo "

Html linki
";
                echo "

Tam konumu
";
            } 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.
Dipnot
Bu yazı 12 Haziran 2010 Cumartesi günü yazılmıştır. Bulunduğu kategori : ,,,. Yazdığım yazıları RSS 2.0 sistemini kullanarak takip edebilir, dilerseniz yorum yapabilirsiniz. Unutmadan, Bu yazı sizler tarafından tam tamına defa okunmuştur.

Hiç yorum yok:

Yorum Gönder

Sitemizi ziyaret ettiğiniz için teşekkür ederiz


Php Dersleri

ebook library