PHP – Dosya Yükleme

PHP

Bu yazımda size PHP ile dosya yüklemeyi anlatacağım.


Geçen yazımda bir form oluşturmuştuk. Daha sonra bir dosya gönderip $_FILES ile dosya bilgilerini almıştık. Şimdi gönderilen formu kontrol edelim. Yani dosya gönderildiyse işleme devam edecek, gönderilmediyse uyarı mesajı verecek.

  if($_FILES['dosya']['error'] == 4){
    echo 'Lütfen dosyayı seçiniz...';
  }else{
    echo '<pre>';
    print_r($_FILES);
    echo '</pre>'; 
  }

Eğer dosya yüklemeden butona basarsak şu uyarıyı alırız:

Lütfen dosyayı seçiniz…


Dosyanın Yüklendiğini Konrol Etme

Eğer yüklenilen dosyanın düzgün yüklenip yüklenmediğini kontrol etmek istiyorsak bunun için is_uploaded_file() metodu kullanılır.

  if($_FILES['dosya']['error'] == 4){
    echo 'Lütfen dosyayı seçiniz...';
  }else{
    if(is_uploaded_file($_FILES['dosya']['tmp_name'])){
      echo '<pre>';
      print_r($_FILES);
      echo '</pre>'; 
    }else{
      echo 'dosya yüklenirken bir hata oluştu...';
    }
  }

Eğer dosya düzgün yüklenmezse şu uyarı döndürülecek:

dosya yüklenirken bir hata oluştu…


Dosya Türünü Sınırlama

Örneğin; formunuz belli formatları desteklemesini istiyorsunuz. Sadece resim yüklensin veya sadece text dosyası yüklensin gibi.

  if($_FILES['dosya']['error'] == 4){
    echo 'Lütfen dosyayı seçiniz...';
  }else{
    if(is_uploaded_file($_FILES['dosya']['tmp_name'])){
      
      $gecerli_dosya_uzantilari = [
        'image/jpeg',
        'image/png',
        'image/gif'
      ];

      $dosya_uzantisi = $_FILES['dosya']['type'];

      if(in_array($dosya_uzantisi,$gecerli_dosya_uzantilari)){
        echo '<pre>';
        print_r($_FILES);
        echo '</pre>';
      }else{
        echo 'bu dosya türü desteklenmiyor';
      };

    }else{
      echo 'dosya yüklenirken bir hata oluştu...';
    };
  };

Yukarıdaki örneği incelerseniz bu forma şu üç uzantı tipinde dosya yükleyebildiğinizi görürsünüz:

  • image/jpeg
  • image/png
  • image/gif

Dosya Boyutunu Sınırlama

Eğer dosya boyutunu sınırlamak istersek kodları şu şekilde yazıyoruz.

  if($_FILES['dosya']['error'] == 4){
    echo 'Lütfen dosyayı seçiniz...';
  }else{
    if(is_uploaded_file($_FILES['dosya']['tmp_name'])){
      
      $gecerli_dosya_uzantilari = [
        'image/jpeg',
        'image/png',
        'image/gif'
      ];

      $dosya_uzantisi = $_FILES['dosya']['type'];

      $gecerli_dosya_boyutu = (1024*1024*3);

      if(in_array($dosya_uzantisi,$gecerli_dosya_uzantilari)){
        if($gecerli_dosya_boyutu <= $_FILES['dosya']['size']){
          echo '<pre>';
          print_r($_FILES);
          echo '</pre>';
        }else{
          echo 'dosya boyutunu aşıyorsunuz.';
        }
      }else{
        echo 'bu dosya türü desteklenmiyor';
      };

    }else{
      echo 'dosya yüklenirken bir hata oluştu...';
    };
  };

Yüklenilen Resimi Bir Dosyaya Yollamak

Bir resimi veya başka uzantılı bir belgeyi upload ettikten sonra bir klasöre taşımak istiyorsak bunun için move_uploaded_file() metodu kullanılır.

<?php

  if($_FILES['dosya']['error'] == 4){
    echo 'Lütfen dosyayı seçiniz...';
  }else{
    if(is_uploaded_file($_FILES['dosya']['tmp_name'])){
      
      $gecerli_dosya_uzantilari = [
        'image/jpeg',
        'image/png',
        'image/gif'
      ];
      $dosya_uzantisi = $_FILES['dosya']['type'];
      $gecerli_dosya_boyutu = (1024*1024*3);
      $yukle = move_uploaded_file($_FILES['dosya']['tmp_name'],  $_FILES['dosya']['name']);


      if(in_array($dosya_uzantisi,$gecerli_dosya_uzantilari)){
        if($gecerli_dosya_boyutu >= $_FILES['dosya']['size']){
          if($yukle){
            echo '<h3>Dosya başarıyla yüklendi.../h3>';
            echo '<img src='. $_FILES['dosya']['name'].'></img>';
          }else{
            echo 'bir sorun oluştu. Dosya yüklenemedi...';
          }
        }else{
          echo 'dosya boyutunu aşıyorsunuz.';
        }
      }else{
        echo 'bu dosya türü desteklenmiyor';
      };

    }else{
      echo 'dosya yüklenirken bir hata oluştu...';
    };
  };

?>

Yukarıdaki örnekte; resim belgesi düzgün olarak taşındıysa resimi gösteriyor, herhangi bir sorundan dolayı yüklenmediyse hata mesajı veriyor.


EK: copy()

Eğer sadece dosya yükleyeyim devamı önemli değil diyorsanız copy() metodunu kullanabilirsiniz.

  copy($_FILES['dosya']['tmp_name'], '/' . $_FILES['dosya']['name'])

Yorum bırakın