PHP – Çoklu Dosya Yükleme

Bu yazımda size önceki yazılarımda anlattığım dosya işlemlerini, çoklu dosya yüklerken nasıl kullanacağınızı göstereceğim.


Şöyle bir form oluşturalım.

<form action='sonuc.php' method='post' enctype="multipart/form-data">
  Dosya seçiniz: <br>
  <input type='file' name='dosya[]' multiple><br>
  <button type='submit'>YÜKLE</button>
</form>

Daha sonra oluşturulan bu formdan dosya özelliklerini döndürelim.

  function multi_upload($dosyalar){
    echo '<pre>';
    print_r($dosyalar);
    echo '</pre>';

  };

  $sonuc = multi_upload($_FILES['dosya']);

Yukarıdaki kodları sonuc.php adındaki bir belgeye yazıysak kodlarımız düzgün olarak görüntülecektir. Şimdi birden fazla dosya yüklemeye alışın. Muhtemelen önünüze şuna benzer bir ekran çıkacaktır:

     [type] => Array
        (
            [0] => image/png
            [1] => image/png
        )

    [tmp_name] => Array
        (
            [0] => C:\xampp\tmp\php2087.tmp
            [1] => C:\xampp\tmp\php2088.tmp
        )

    [error] => Array
        (
            [0] => 0
            [1] => 0
        )

    [size] => Array
        (
            [0] => 145252
            [1] => 159899
        ) 

Şimdi bu kodlara biraz kontrol yapıları ekleyelim. Örneğin; dosyaları yüklerken her hangi bir hata olup olmadğını kontrol etmek için şöyle bir kod yazabiliriz.

  function multi_upload($dosyalar){

    $sonuc = [];

    foreach($dosyalar['error'] as $index => $error){
      if($error == 4){
        $sonuc['hata'] = 'Lütfen dosya seçiniz...';
      }else{
        $sonuc['hata'][] = 'Dosya yüklenirken bir hata oluştu.';
      }
    }

    if(isset($sonuc['hata'])){
      echo '<pre>';
      print_r($dosyalar);
      echo '</pre>';
    }

  };

  $sonuc = multi_upload($_FILES['dosya']);

PHP – Dosya Yükleme

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'])

PHP – Yüklenen Dosyaların Bilgilerini Almak ($_FILES)

Bu yazımda size kısaca $_FILES metodunu kullanarak, PHP’de dosya bilgilerini almayı anlatacağım.


$_FILES

$_FILES kullanarak dosya hakkında bilgilere erişebiliyoruz.

İki adet php belgesi oluşturalım. Bunlar index.php ve sonuc.php adını alsın.

index.php

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>PHP Tutorial</title>
</head>
<body>
  
  <form action="sonuc.php" method="post" enctype="multipart/form-data">
    Dosya Seçiniz: <br>
    <input type='file' name='dosya'><br>
    <button type='submit'>Yükle</button>
  </form>

</body>
</html>

sonuc.php

<?php
echo '<pre>';
print_r($_FILES);
echo '</pre>';
?>

Bu kodları çalıştırdıktan sonra dosya seçip yükle butonuna bastığımızda $_FILES metodu bize dosya hakkında bilgiler verecektir.

[name] => php.jpg
[type] => image/jpeg
[tmp_name] => C:\xampp\tmp\php82C1.tmp
[error] => 0
[size] => 140236


PHP – Çerez (Cookie) Kullanımı

Bu yazımda size PHP’de çerez kullanımı hakkında bilgi vereceğim.


PHP de Çerez Oluşturma

İlk olarak PHP de bir çerez nasıl oluşturulur onu öğrenelim. Çerez oluşturmak için setcookie() metodu kullanılır.

setcookie( arr1, arr2, arr3 );
  • arr1: çerez adı
  • arr2: çerezin değeri
  • arr3: çerezin süresi

Örneğin; 1 dakika boyunca durması istenen bir görev tamamlama çerezi olabilir.

setcookie('görevNeOldu', 'tamamlandı', time() + 60)

Görüldüğü üzere 60 saniye sonra bu çerez yok olacak. Peki biz bunu nasıl göreceğiz? Bunun içinde print_r() ile yazdırmanız yeterli. Yalnız hızlı olun, 1 dakika içinde bakmanız gerekir.


Örneğin; bir gün boyunca kalması istenen bir çerez için şöyle bir kod yazılabilir:

setcookie('görevNeOldu', 'tamamlandı', time() + (60*60*24) )

PHP de Çerez Silme

PHP de çerez silme nedense çok tuhaf. Özel bir metodu yok. Geçmişte silme işlemi yapıyorsun. Yani şöyle:

setcookie('görevNeOldu', 'tamamlandı', time() - 1 )

Bir yerine istediğiniz değeri yazabilirsiniz. Sadece geçmiş olması yeter.

PHP – Session Kullanımı

Bu yazımda PHP’de Session başlatma, kullanma ve silme işlemlerini göstereceğim.


PHP Session Oluşturma Ve Kullanma

PHP’de oturum bilgilerini saklamak ve oturumları yönetmek Session’lar kullanılır. Session’ların çerezlerden farkı; çerezler kullnaıcı bilgilerini local yani bilgisayarda tutarlar, Session’lar ise bilgileri sunucu tarafında tutarlar. Bu nedenle güvenliğin önemli olduğu yerlerde Session’ların kullanıldığını görürsünüz.
Session başlatıldığı anda veriler sunucu bilgisayarı üzerinde ki bir text dosyasında saklanır. Kullanıcı oturumu kapatığında verileri silinir ve Session’lar çerezler gibi süreli oluşturulamaz.

Küçük bir örnek yapalım ve bunun üzerinden devam edelim.

  session_start();
  $_SESSION['Kullanici_adi'] = 'Furkan';
  $_SESSION['Parola'] = 'Gulsen';
  echo 'Kullanıcı adı: ' .   $_SESSION['Kullanici_adi'] . '<br>';
  echo 'Parola: ' .  $_SESSION['Parola'];
  session_destroy();

Kullanıcı adı: Furkan
Parola: Gulsen

Görüldüğü gibi sessionlara başlama için ilk olarak session_start() metodunu kullanmalıyız. Eğer bunu kullanmadan devam edersek hata verecektir. En sonda ise session_destroy() metodunu kullanıp sessionları kapatıyoruz.

$_SESSION[] metoduları ile değişkenlere değerler atayıp bu değişkenleri kullanıcıya ait yapabiliyoruz. Yukarıda görüldüğü üzere, kullanıcı adı ve parola adında iki adet değişkene(session) belirli değerler verilmiş. Bu bunlar session_destroy() kullanılmadan yazırılmış. Eğer session_destroy() metodu kullanıldıktan sonra yazılıcak olsaydı, hata verecekti.


Örnek:

  session_start();
  $_SESSION['Kullanici_adi'] = 'Furkan';
  $_SESSION['Parola'] = 'Gulsen';

Yukarıdaki kodları çalıştırdıktan sonra bunların hepsini silelim. Ve yerine şu kodları yazalım.

  echo 'Kullanıcı adı: ' .   $_SESSION['Kullanici_adi'] . '<br>';
  echo 'Parola: ' .  $_SESSION['Parola'];

Her hangi bir çıktı aldınız mı? Aldınız. Peki session_start() kullanmadan devam edersek hata alacağımızı söyledekij yukarıda. Şimdi neden almadık ?

Bunun nedeni zaten kullanmış olmamız. Görüdüğü üzere session_destroy() metodunu kullanmadık. Yani session yapısını daha yıkmadık. Bu da demek oluyor ki bütün kodumuzda sadece bir kez session_start() kullanmamız yeterli. Kapatmadığımız sürece session yapısını istediğimiz yerde kullanabiliriz.


PHP Session Silme

Yukarıdaki kodu kullanalım:

  session_start();
  $_SESSION['Kullanici_adi'] = 'Furkan';
  $_SESSION['Parola'] = 'Gulsen';
  echo 'Kullanıcı adı: ' .   $_SESSION['Kullanici_adi'] . '<br>';
  echo 'Parola: ' .  $_SESSION['Parola'];
  session_destroy();

Bunun sonucunda bize şu çıktıyı veriyordu:

Kullanıcı adı: Furkan
Parola: Gulsen

Örneğin burada kullanıcı adını silmek istersek unset() metodunu kullanacağız.

  unset($_SESSION['Parola']);

Bunu yaptıktan sonra paralo silinmiş olacaktır.

PHP – Dosya Ve Dizin Adlarını Yeniden Adlandırma

Bu yazımda mevcut olan dosya veya dizin adlarını nasıl değiştirebileceğimizi göstereceğim.


rename()

Eğer dosya ve dizin adı değiştirmek istiyorsak rename() metodunu kullanmamız yeterlidir. Bu metot iki adet parametre alır:

   rename(arr1,arr2);
  • arr1: mevcut olan dosya veya dizin
  • arr2: Yeni dosya veya dizin adı

Örnek:

   rename('test.txt','isim_degistirildi.txt');

Bu kodu çalıştırıp bulunduğu klasöre bakarsak isminin değiştiğini göreceksiniz.

PHP – Dizindeki Dosyaları Listelemek

Bu yazımda bir dizinde bulunan dosyaların nasıl listelendiğini göstereceğim.

Dizinde bulunan dosyaları listelemek için iki adet metodum var. Bunlar; scandir() ve glob() metotlarıdır.

scandir()

Bu metot sayesinde dizin içeriğini tarayabiliyoruz.

  $DOSYALAR = scandir('.');
  echo '<pre>';
  print_r($DOSYALAR);
  echo '</pre>';

[0] => .
[1] => ..
[2] => index.php
[3] => sonuc.php
[4] => test

Bu metodu çalıştırdığımızda yukarıdaki çıktıya benzer bir çıktı oluşturulur. Bu çıktı dizi olarak geldiği için print_r() ile yazdırdım.


glob()

Bu metot scandir() metoduna benzer. Farkları da var tabiki. Çalıştırdığımızda bunu anlıyoruz zaten.

  $DOSYALAR = glob('*');
  echo '<pre>';
  print_r($DOSYALAR);
  echo '</pre>';

[0] => index.php
[1] => sonuc.php
[2] => test


Glob fonksiyonunun güzel yanları istediğimiz türden dosya tarabiliyoruz. Örneğin .php uzantılı dosya taramak istersek, şöyle kullanıyoruz:

  $DOSYALAR = glob('*.php');
  echo '<pre>';
  print_r($DOSYALAR);
  echo '</pre>';

Veya birden çok dosya uzantısı taramak istersek:

  $DOSYALAR = glob('*{php,css}');
  echo '<pre>';
  print_r($DOSYALAR);
  echo '</pre>';

bu şekilde kullanıyoruz.


Örnek:

Konuyu iyi anlamanız için küçük bir örnek yazalım.

  function dosyaları_listele($DIZININ_ADI){
    $DOSYALAR = scandir($DIZININ_ADI);
    echo '<ul>';
      foreach( $DOSYALAR as $DOSYA){
        echo '<li>' . $DOSYA . '</li>';
      }
    echo '</ul>';
  };
  
  dosyaları_listele('.');

Bu kod gayet açık. Eğer anlamadığınız bir yer olursa yorumlarda yazarak belirtebilirsiniz. Elimden geldiğince yardımcı olmaya çalışırım.

PHP – Dosya Ve Dizinlerde CHMOD Ayarını Belirlemek

Bu yazımda geçen yazımdan belirtiğim Dosya ve dizinlerde CHMOD ayarlarından bahsedeceğim.


CHMOD()

chmod() metodu kullanmak için öncelikle bir dosya oluşturalım. Eğer dosya oluşturmayı bilmiyorsanız bu yazıma bakıp hemen geri dönün.

Hemen test adında bir dosya oluşturalım.

mkdir('test');

Dosyayı oluşturduk. Şimdi geldik asıl konumuz olan chmod() metoduna. Bu metot 2 parametre alır. Birinci parametre; dosyayı belirtir, ikinci parametre 4 rakamlı bir sayıdır.

chmod('test.txt',0777);

Yukarıdaki örnek olması açısından bir chmod() metodu kullandık. Görüldüğü üzere 2.parametre belirli sayılar alır.

  • 1.sayı: 0 ile başlar
  • 2.sayı: Dosya sahibinin izinlerini belirtir
  • 3.sayı: Kullanıcı gruplarının izinlerini belirtir.
  • 4.sayı: Geri kalan herkesi belirtir.

0777 sayısı sırasıyla yukarıdaki değerleri belirtir. Şimdi bu sayıların anlamlarını açıklayayım:

  • 1 = işlem izni
  • 2 = yazma izni
  • 4 = okuma izni

Yukarıdaki değerleri anlamamış olabilirsiniz. Şimdi yukarıdaki örneği ele alalım:

0777

  • 0 = 0 ile başladığını söylemiştik.(bu kural)
  • 7 = bu sayı izinlerin toplamına eşit. Yani; işlem izni(1) + yazma izni(2) + okuma izni(4) = 7. Tüm izinler verildiyse 7 yazılır. Bu yüzden 0777 demek;
    • dosya sahibine tüm izinler verildi.kullanıcı grubuna tüm izinler verildi.geri kalan herkese tüm izinler verildi, demektir.

PHP – Dizin Oluşturma Ve Silme

PHP de dizin oluşturmak ve bu dizi üzerinde işlemler yapma oldukça basittir. Bu yazımda dizin oluşturmayı ve bu dizini silmeyi öğreneceksiniz.

Bunlar için kullanılan metotlar şunlardır:

  • mkdir(): Dizin oluşturmak için kullanılır.
  • rmdir(): Mevcut olan dizini silmek için kullanılır.

mkdir()

Bu metot dizin oluşturmak için kullanılır. İki adet parametre alır.

mkdir( dosya adı, chmod(özel kodlar) )

Örnek:

mkdir('test');

Bu kodu yazdıktan sonra dosyanızı kontrol edin. Test adında bir dizin oluştuğunu göreceksiniz.


rmdir()

Bu metot sayesinde var olan diziyi silebiliyoruz.

rmdir( dosya adı )

Örnek:

rmdir('test');

Var olan test dizinini sildi. Perki ya bunu bir daha çalıştırırsanız ne olur? Hata verdi dimi ? İşte biz bu hatayı almamak için diziyi önce kontrol etmemiz gerekiyor. Bunun içinde file_exists() metodunu kullanıyoruz.

  if( file_exists('test') ){
    rmdir('test');
  }else{
    echo 'Böyle bir dizin yok!';
  }

Bunu kodu çalıştırırsak hiç bir hata almadan yolumuza devam edebiliriz.