Yükleniyor

Php ile resim upload

Php ile resim yüklemek $_FILES methodu ile gerçekleşir, oldukça basit ve anlaşılırdır. Tamamen düz bir yapıya sahiptir. Tek dikkat edilmesi gereken husus; kullanıcıdan sunucuya bir dosya, resim vb. yüklettiğimiz için güvenliğine dikkat etmeliyiz. if-else yapıları ile belirli bir kontrollerden geçirmemiz gerekmektedir.

Post yöntemi ile normal bir html form kullanarak resmi gönderip ve kontrol sağlayıp yükleme işlemini gerçekleştireceğiz.

Form'a bir dosya post edeceğimizi belirtmek zorundayız. Form tagına "enctype" methoduna "multipart/form-data" parametresini ekleyeceğiz. Bu sayede form bizim dosya göndereceğimizi anlayacak.


$_FILES methodu ile gönderilen resmin türünü, boyutunu, adını vb. bilgileri öğrenebiliriz. Bunları sağlayan yan methodları aşağıdaki gibidir.

Adı Kullanımı Görevi
name $_FILES["input_name"]["name"] Gönderilen dosyanın adı
tmp_name $_FILES["input_name"]["tmp_name"] Gönderilen dosyanın geçici olarak sunucuda barındığı yol
size $_FILES["input_name"]["size"] Gönderilen dosyanın boyutu (bayt cinsinden)
type $_FILES["input_name"]["type"] Gönderilen dosyanın tipi(jpg, png, xls, vb.)
error $_FILES["input_name"]["error"] Dosya gönderilirken gerçekleşen hata ve hata kodu

Aşağıda basit bir html form sayfası hazırladık. form.php sayfası olarak kayıt ettik ve yukle.php adresine post ettik.

<!doctype html>
<html>

<head>
    <title>Form Sayfası | Resim Yükleme</title>
</head>

<body>
    <form action="yukle.php" method="post" enctype="multipart/form-data">
        <input type="file" name="resim" />
        <button type="submit">YÜKLE</button>
    </form>
</body>

</html>

Şimdide size yukle.php sayfasındaki $_FILES methodunun çalışma mantığını gösterelim.

<?php
if (isset($_FILES['resim'])) {
    //Eğer form tagına enctype="multipart/form-data" bunu eklemeseydik if e girmez direk elseye giderdi.
    echo 'Resim gönderilmiştir. <br />';
    var_dump($_FILES['resim']);
    /* Resim seçilerek gönderildiğinde EKRAN ÇIKTISI:
        Resim gönderilmiştir.
        C:\wamp64\www\test\yukle.php:5:
        array (size=5)
        'name' => string 'black.png' (length=9)
        'type' => string 'image/png' (length=9)
        'tmp_name' => string 'C:\wamp64\tmp\php2D32.tmp' (length=25)
        'error' => int 0
        'size' => int 89509
    ************************
    Resim seçilmeden gönderildiğinde EKRAN ÇIKTISI:
        Resim gönderilmiştir.
        C:\wamp64\www\test\yukle.php:5:
        array (size=5)
        'name' => string '' (length=0)
        'type' => string '' (length=0)
        'tmp_name' => string '' (length=0)
        'error' => int 4
        'size' => int 0

        ## Gene ekran çıktısı verir ancak boş değerler döner.
    */
} else
    echo 'Resim gönderilmemiştir. Lütfen resim seçiniz.';
?>

Php ile resim yükleme örneği

form.php olarak kayıt edin.
<!doctype html>
<html>

<head>
    <title>Form Sayfası | Resim Yükleme</title>
</head>

<body>
    <form action="yukle.php" method="post" enctype="multipart/form-data">
        <input type="file" name="resim" />
        <button type="submit">YÜKLE</button>
    </form>
</body>

</html>
yukle.php olarak kayıt edin.
<?php
if (isset($_FILES['resim'])) {
    $hata = $_FILES['resim']['error']; //resim inputundan gönderilen hatayı aldık.
    if ($hata != 0) { // hata kontrolü gerçekleştirdik.
        echo 'Resim gönderilirken bir hata gerçekleşti.';
    } else {
        $resimBoyutu = $_FILES['resim']['size']; // resim boyutunu öğrendik
        if ($resimBoyutu > (1024 * 1024 * 2)) {
            //buradaki işlem aslında bayt, kilobayt ve mb formülüdür.
            //2 rakamını mb olarak görün ve kaç yaparsanız o mb anlamına gelir.
            //Örn: (1024 * 1024 * 3) => 3MB / (1024 * 1024 * 4) => 4MB

            echo 'Resim 2MB den büyük olamaz.';
        } else {
            $tip = $_FILES['resim']['type']; //resim tipini öğrendik.
            $resimAdi = $_FILES['resim']['name']; //resmin adını öğrendik.

            $uzantisi = explode('.', $resimAdi); // uzantısını öğrenmek için . işaretinden parçaladık.
            $uzantisi = $uzantisi[count($uzantisi) - 1]; // ve daha sonra 1 den fazla nokta olma ihtimaline karşı en son noktadan sonrasını al dedik.

            $yeni_adi = "upload/" . time() . "." . $uzantisi; // resime yeni isim vereceğimiz için zamana göre yeni bir isim oluşturduk ve yüklemesi gerektiği yeride belirttik.
            //yuklenecek_yer/resim_adi.uzantisi

            if ($tip == 'image/jpeg' || $tip == 'image/png') { //uzantısnın kontrolünü sağladık. sadece .jpg ve .png yükleyebilmesi için.
                if (move_uploaded_file($_FILES["resim"]["tmp_name"], $yeni_adi)) {
                    //tmp_name ile resmi bulduk ve $yeni_adi değişkeninin değerine göre yükleme işlemini gerçekleştirdik.
                    echo "Resim başarılı bir şekilde yüklendi.";
                } else echo 'Resim yüklenirken bir hata oluştu.';
            } else {
                echo 'Yanlızca JPG ve PNG resim gönderebilirsiniz.';
            }
        }
    }
}
?>