Yükleniyor

Php ile dosya yüklemek $_FILES methodu ile gerçekleşir ve resim yüklemek ile tamamen aynıdır. Sadece dosya türünü belirtmemiz gerekmektedir.

Post yöntemi ile normal bir html form kullanarak dosyayı 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 dosyanın 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ı | Dosya Yükleme</title>
</head>

<body>
    <form action="yukle.php" method="post" enctype="multipart/form-data">
        <input type="file" name="dosya" />
        <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['dosya'])) {
    //Eğer form tagına enctype="multipart/form-data" bunu eklemeseydik if e girmez direk elseye giderdi.
    echo 'Dosya gönderilmiştir. <br />';
    var_dump($_FILES['dosya']);
    /* Dosya seçilerek gönderildiğinde EKRAN ÇIKTISI:
        Dosya gönderilmiştir.
        array (size=5)
            'name' => string 'test.xlsx' (length=9)
            'type' => string 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' (length=65)
            'tmp_name' => string 'C:\wamp64\tmp\phpA04F.tmp' (length=25)
            'error' => int 0
            'size' => int 6604
    ************************
    Dosya seçilmeden gönderildiğinde EKRAN ÇIKTISI:
        Dosya 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 'Dosya gönderilmemiştir. Lütfen dosya seçiniz.';
?>

Php ile dosya yükleme örneği

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

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

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

</html>
yukle.php olarak kayıt edin.
<?php
if (isset($_FILES['dosya'])) {
    $hata = $_FILES['dosya']['error']; //dosya inputundan gönderilen hatayı aldık.
    if ($hata != 0) { // hata kontrolü gerçekleştirdik.
        echo 'Dosya gönderilirken bir hata gerçekleşti.';
    } else {
        $dosyaBoyutu = $_FILES['dosya']['size']; // dosya boyutunu öğrendik
        if ($dosyaBoyutu > (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 'Dosya 2MB den büyük olamaz.';
        } else {
            $dosyaAdi = $_FILES['dosya']['name']; //resmin adını öğrendik.

            $uzantisi = explode('.', $dosyaAdi); // 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; // dosyaya yeni isim vereceğimiz için zamana göre yeni bir isim oluşturduk ve yüklemesi gerektiği yeride belirttik.
                        //yuklenecek_yer/dosya_adi.uzantisi.
            if (move_uploaded_file($_FILES["dosya"]["tmp_name"], $yeni_adi)) {
                //tmp_name ile dosyayı bulduk ve $yeni_adi değişkeninin değerine göre yükleme işlemini gerçekleştirdik.
                echo "Dosya başarılı bir şekilde yüklendi.";
            } else echo 'Dosya yüklenirken bir hata oluştu.';
        }
    }
}
?>