İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

web siteleri için resim yükleme uygulaması

OnurSQL

0
İyinet Üyesi
Katılım
29 Mart 2005
Mesajlar
2,025
Reaction score
1
Konum
ankara
logo.jpg


Web sitesi üzerinden resim yüklemek isteyen arkadaşlar için basit bir uygulama yaptım. Uygulama için demo, indirme ve kod kısmı aşağıdadır.

Demo (Tasarım için hakan'a teşekkürler.)

İndir

PHP:
<?php
##################################################################################
#
# Dosya               : islem.php 
# Lisans              : http://www.gnu.org/copyleft/gpl.html
#                      <http://www.onur.org>
# Tarih		          : 10/08/2009
#
################################################################################## 
class imajport
{
    public static $klasor = _KLASOR_;
    public static $yukleme_boyutu = _KB_; 
    public static $url;
    public $mime = array('jpg' => 'image/jpeg', 
				         'png' => 'image/png',  
		                 'gif' => 'image/gif'); #Kabul gören resim formatlari
    public $resim_yolu = lisanssız;
    public $curl_sonuc = lisanssız;
    public $bilgi;

    /*
    ** Ön tanimli kontrol ve islemleri yapar.
    ** @access lisanssız
    ** @param  lisanssız
    */

    public function __construct()
    {

        # klasor kontrolleri
        if (!is_dir(self::$klasor) && !is_writable(self::$klasor))
            	throw new Exception(2);

        # sunucuda curl, gd ve file_get_contents var mi?
        if (!extension_loaded('curl') && function_exists('file_get_contents') && extension_loaded('gd'))
            	throw new Exception(3);

}

    /*
    ** Yükleme Fonksiyonu
    ** @access public
    ** @param  boolean
    */

    public function yukle($_DOSYA)
    {
        $dosya = &$_DOSYA;
        $islem = true;
        if (is_uploaded_file($dosya['tmp_name']))
        {

            # dosya ismini temizle
            $dosya['name'] = $this->_temizle($dosya['name']);

            # yükleme hatasi ve gelen veri türüne bak
            if ($dosya['error'] !== 0 && !is_array($dosya))
                	$islem = false;

            # resim dosyasini oku ve uzantisini al
            if (!$this->_kontrol($dosya['tmp_name'], $dosya['name']))
                	$islem = false;

            # mime tipini öntanimlilarin içinde süz
            if (!in_array($dosya['type'], $this->mime))
                	$islem = false;
			
			$dosya_boyutu = (int)($dosya['size'] / 1024) / 1024; // KB -> MB
		
            # dosya boyutunu kontrol et
            if ( round($dosya_boyutu, 2) > self::$yukleme_boyutu)
                	$islem = false;
			
            # $islem degiskeninin bool olup olmadigina bak ve degiskenin durumuna göre islemi baslat
            if (is_bool($islem) && $islem === true)
            {

                # resim yolunu tanimla
                $this->resim_yolu = sprintf('%s/%s', self::$klasor, $dosya['name']);
                # dosyayi yükle ve sonucu degiskene at
                $yukle = (move_uploaded_file($dosya['tmp_name'], $this->resim_yolu)) ? true : false;
                # yükleme sonucunu kontrol et
                if ((bool)$yukle === false || file_exists($this->resim_yolu) === false)
					throw new Exception(7);

            }
            else
            {
                throw new Exception(4);
            }
        }
	}


    /*
    ** Karakter Temizleme Fonksiyonu
    ** @access public
    ** @param  string
    */

    public function _temizle($dosya)
    {
        $_temiz = trim($dosya);
        $_temiz = strtolower($_temiz);
        # preg_replace ile desene göre düzenle
        $_temiz = preg_replace('[^0-9A-Za-z\.]', "_", $_temiz);
        return $_temiz;
    }

    /*
    ** Uzanti ve Resim Dogrulama Fonksiyonu
    ** @access public
    ** @param  boolean
    */

    public function _kontrol($dosya, $dosya_adi)
    {
        #operatöre göre ARRAY olarak döndür
        $parcala = explode('.', $dosya_adi);
        #benzer dizeleri sil
        $_uzanti = array_unique($parcala);
        #son parçayi al
        $_uzanti = end($_uzanti);
        #resimi dogrula ve uzantiyi kontrol et
        if (imagecreatefromstring(file_get_contents($dosya)) === false ||
            array_key_exists($_uzanti, $this->mime) === false)
            return false;
        else
            return true;
    }

    /*
    ** Dosyayi resim.im'a curl ile yükleme fonksiyonu
    ** @access public
    ** @param  string
    */

    public function imajport_tasi()
    {

        #site adresinin dogrulugunu kontrol et
        $desen = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/';

        if (preg_match($desen, $this->url) === false)
            	throw new Exception(5);


        #cURL oturumunu baslat
        $oturum = curl_init();
        #API adresini degistirmeyiniz.
        curl_setopt($oturum, CURLOPT_URL, 'http://api.resim.im/api?q=yukle');
        curl_setopt($oturum, CURLOPT_POST, true);
        curl_setopt($oturum, CURLOPT_TIMEOUT, 60);
        curl_setopt($oturum, CURLOPT_HEADER, false);
		#$_FILES		
		$_alan = array('site' => $this->resim_yolu, 
					   'dosya' => "@{$this->resim_yolu}");
		curl_setopt($oturum, CURLOPT_POSTFIELDS, $_alan);
        curl_setopt($oturum, CURLOPT_RETURNTRANSFER, true);
        #yükleme sonucunu degiskene ata
		
        $this->curl_sonuc = curl_exec($oturum);
        if ($this->curl_sonuc === false) {
            	throw new Exception(6);
		}
        #xml olarak dönen datayi oku
        $xml = simplexml_load_string($this->curl_sonuc);
        $this->bilgi = (int)$xml->sonuc;
        #oturumu kapat
        curl_close($oturum);
		if(unlink($this->resim_yolu) === false)
			error_log('Geçici klasör içinden resim silinemedi.', 0);
		return $this->bilgi;
    }

    /*
    ** Sinif sonlaniyor
    ** @access lisanssız
    ** @param  lisanssız
    */

    public function __destruct()
    {
        #$dosya = $_FILES degiskenini yoket
        unset($dosya);
    }

}
# Ön tanimli degerler
define('_KLASOR_', 'tmp'); # Gecici klasor adi, chmod 775 vermeyi unutmayiniz.
define('_KB_', '2048'); # 1 MB maksimum degerdir. Degeri kilobayt olarak girmelisiniz. 1000 KB azaltabilir ama yükseltmeniz halinde hata alirsiniz.
error_reporting(0); # 0 olmasi tavsiye edilir, cURL safe_mode sebebiyle open_basedir hatasi verebilir. 

if ($_FILES)
{
	ob_start();
    try
    {
        $a = new imajport;
        $a->yukle($_FILES['dosya']);
		$a->imajport_tasi();
        echo $a->bilgi;
    }
    catch (exception $e)
    {
        echo $e->getMessage();
    }
	$veri = ob_get_contents();
	ob_end_flush();
	echo '<script type="text/javascript">
			window.top.bitir("'.intval($veri).'");
		  </script>';
}
?>
 

Mercedes

0
İyinet Üyesi
Katılım
8 Temmuz 2009
Mesajlar
95
Reaction score
3
Merhaba: gerçekten güzel bir paylaşım fakat buraya upload edilen dosyaların görülebilmesi çin bizim özel bir panelimiz bulunmakta dimi.
 

OnurSQL

0
İyinet Üyesi
Katılım
29 Mart 2005
Mesajlar
2,025
Reaction score
1
Konum
ankara
Dosyalar resim.im adresine yüklenmekte. Yeni versiyonda resim.im kullanıcı hesabınıza kaydetmek için çalışma yapabiliriz.
 

Cagatay

0
İyinet Üyesi
Katılım
10 Mart 2006
Mesajlar
2,789
Reaction score
0
üstad kelimesi şu durumda bana aitti onursukul =)
 

Ozcan

0
İyinet Üyesi
Katılım
12 Mayıs 2007
Mesajlar
3,749
Reaction score
59
Konum
Antalya
smf foruma eklenti gibi ekleyebilirseniz sitemde kullanmak isterim. Fakat resim paylaşımı çok fazla oluyor normal forum sitelerine göre. ayrıca üyelerin imzalarında ki gibi resim uygulamaları da yapabilirseniz çok güzel olur :) yabancı siteleri kullanmak yerine sizin sitenizi kullanmalarını sağlaya bilirim.

örnek izmalar :
http://www.anneilebebek.com/index.php?topic=3.17445
http://www.anneilebebek.com/index.php?topic=3.17460
http://www.anneilebebek.com/index.php?topic=3.17415
http://www.anneilebebek.com/index.php?topic=3.17400 gibi.
 

OnurSQL

0
İyinet Üyesi
Katılım
29 Mart 2005
Mesajlar
2,025
Reaction score
1
Konum
ankara
smf foruma eklenti gibi ekleyebilirseniz sitemde kullanmak isterim. Fakat resim paylaşımı çok fazla oluyor normal forum sitelerine göre. ayrıca üyelerin imzalarında ki gibi resim uygulamaları da yapabilirseniz çok güzel olur :) yabancı siteleri kullanmak yerine sizin sitenizi kullanmalarını sağlaya bilirim.

örnek izmalar :
http://www.anneilebebek.com/index.php?topic=3.17445
http://www.anneilebebek.com/index.php?topic=3.17460
http://www.anneilebebek.com/index.php?topic=3.17415
http://www.anneilebebek.com/index.php?topic=3.17400 gibi.

olabilir tabi. smf'yi inceleyeyim. teşekkürler.
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst