PHP File Procedures

Php Dosya İşlemleri

PHP’de dosya sistemi işlevleri sayesinde yeni dosyalar oluşturabilecek, olan dosyaları değiştirebilecek ya da silebileceğiz. Dosya yükleme ve indirme olaylarında da lazım olacak olan bir çok önemli fonksiyona da bu başlık altında değineceğiz.

Bu işlevler sayesinde tek bir PHP dosyası ile milyonlarca dosya oluşturup, silerek çok büyük bir iş yapmış hissi yaratıp ego tatmin edebilir ya da güzel bir dosya yönetimi, arşiv yönetimi, dosya menejeri gibi işe yarar uygulamalar yapabilirsin.

Şimdi bir dosyayı oluşturmak ile başlayıp, açıp, okuyup, yazıp, kapatıp, silmeyi öğreneceğiz.

Dosyalara yazma ve silme izinleri

Dosya oluşturma ya da silme gibi işlemlere girmeden önce tüm bunları yapabilmek için ihtiyacımız olan yetki ve izinlerden bahsetmek istiyorum.

PHP’de elimizi kolumuzu sallaya sallaya bir dizine ya da bir dosyaya müdahale edemeyiz. Önce bazı yetkilerimizin ya da dosyaların yazma izninin olması gerekir. Eğer lokalde kendi bilgisayarımız üzerinde çalışıyorsak varsayılan olarak izinler verilmiştir. Ama gerçek bir site hostunda güvenlik için kısıtlamalar vardır.

Çalışma yapacağımız dosyaya ya da dizine CHMOD denilen değiştirme modunu ayarlamamız gerekmektedir. CHMOD hakkında fazla detaya girmeden sadece bizim kullanacağımız kadarını anlatmak istiyorum.

Bir dosya ya da dizine, FTP ya da hostun yönetim paneli üzerinden yazma izni verebiliriz. Bu işi FTP’den yapmak için gerekli dosya ya da dizine sağ tıklayıp izin değerlerine “777” yazmamız yeterli.

CHMOD değerini 777 yaptığımız dosya ya da dizine tüm yazma, okuma ve silme izinleri vermiş oluruz. Ve bu noktada güvenlik olayına parmak basıyoruz. Malum tüm bu izinleri verince tedbirli olmak ve paronayak davranmak lazım. Sistemi kodlarken yapacaklarımıza ve yaptıklarımıza dikkat etmemiz gerekiyor.

PHP ile dosya oluşturmak

Olmayan dosyayı oluşturup, değiştirip, çalıştırmamız için touch() adında bir fonksiyon ile tanışacağız. Türkçe anlamı dokunmak olan bu fonksiyon PHP’de dosyalara ilk dokunuşu yapmaya ya da eğer dosya varsa son değişim tarihini değiştirmeye yarıyor.

Kullanımı basit, bir parametre ile çalışıyor. Parametresine oluşturulacak dosya adını giriyoruz.

touch('merhaba.txt');

Yukarıdaki kod çalıştığında kaynak PHP dosyasının olduğu dizinde merhaba.txt adında boş bir dosya oluşturur.

PHP ile dosyaları açmak ve kapatmak

Dosyaların içeriğini okuyup, değiştirip, silmeden önce onları PHP’de açmamız gerekiyor. Bu açma işlemi okumak anlamında anlaşılmasın. Gerekli işlemleri yapmaya başlamadan önce dosyaya ilk erişimi ve bağlantıyı sağlamak anlamında açmaktır.

Bu erişimi fopen() fonksiyonu ile yapacağız. Bu fonksiyon iki parametre ile çalışıyor. İlk parametrede erişeceğimiz dosyayı, ikinci parametrede ise dosyayı ne için eriştiğimizi belirtecek kipi giriyoruz.

Dosyalara ne için erişeceğimizi belirtmemizi belirtecek 8 tane kip var. Bu kipleri tabloda açıklamalarıyla yazalım:

  • r    Dosyayı okumak için açar. (read)
  • r+    Dosyayı hem okumak hem de yazmak için açar. (read)
  • w    Dosyayı yazmak için açar. Var olan içeriği siler (write)
  • w+    Dosyayı hem yazmak hem de okumak için açar. Var olan içeriği siler, baştan yazar. (write)
  • a    Dosyayı yazmak için açar. Var olan içeriği silmez sonuna ekler. (append)
  • a+    Dosyayı hem yazmak hem de okumak için açar. Var olan içeriği silmez sonuna ekler. (append)
  • x    Dosyayı oluşturur ve yazmak için açar. Eğer dosya zaten varsa FALSE döner.
  • x+    Dosyayı oluşturur, yazmak ve okumak için açar. Eğer dosya zaten varsa FALSE döner.

Şimdi bu yukarıdaki dosya kipleri ile istediğimiz dosyaya istediğimiz muameleyi görebiliriz.

Dosyalar ile gerekli işlemleri gerçekleştirdikten sonra onları kapatmayı unutmamalıyız. Eğer kapatmazsak bir sonraki dosyaya erişimimizde sorunlarla karşılaşabiliriz. Dosyaları kapatmak için fclose() fonksiyonunu kullanacağız.

Bu fonksiyon bir parametre ile çalışır ve açtığımız dosyayı kapatır. Parametresine fopen ile açtığımız dosyanın değişkeni yazarız.

$dosya = fopen('merhaba.txt', 'r');
fclose($dosya);

Yukarıdaki örnekte merhaba.txt dosyasını okumak için açmış ve ilk erişimi sağlamış olduk ve hemen ardından da kapattık. Sadece erişimi sağlamak ile içeriğe ulaşdığımızı sanmayın. Bağlantıyı sağladıktan sonra diğer okuma ve yazma fonksiyonlarını kullanarak gerekli işlemleri gerçekleştireceğiz.

PHP ile dosyaların içeriğini okumak

Bu işlemi gerçekleştirmek için fopen()‘da r kipini, içeriğe ulaşmak için ise fread() fonksiyonu kullanacağız.

Bu fonksiyonun ilk parametresine önceden fopen ile açtığımız dosyanın değişkenini yazacağız. İkinci parametreye ise dosyadan kaç bayt okuyacağımızı belirteceğiz.

$dosya = fopen('merhaba.txt', 'r');
$icerik = fread($dosya, filesize('merhaba.txt'));
echo $icerik;
fclose($dosya);
Şuan eğer merhaba.txt dosyamızın içerisinde bir şeyler varsa ekranda aynen olduğu gibi yazacaktır. Eğer boş ise ekranda bir şey yazmayacaktır.

Dosyanın tüm içeriğini okumak istediğimiz için ikinci parametreye filesize() fonksiyonu ile dosyanın toplam boyutunu belirterek tüm içeriği almayı sağladık.

PHP ile dosyalara yazma

Dosya yazmak için w kipini ve fwrite() fonksiyonunu kullanacağız. Yanlız w kipini kullanırken eriştiğimiz dosyanın içeriği tamamen silinir ve yazacağımız değer ile değiştirilir.

Eğer daha önce var olan içerik kaybolmadan yazmak istiyorsan o zaman a kipini kullanman gerekecek.

Bu fonksiyonda iki parametre ile çalışıyor. İlk parametreye dosyaya fopen() ile eriştiğimiz değişkeni, ikinci parametreye ise yazılacak içeriği yazarız.

$dosya = fopen('merhaba.txt', 'w');
fwrite($dosya, 'Merhaba Dünya');
fclose($dosya);

Yukarıdaki örneği çalıştırdığımızda merhaba.txt adında dosyamızın içeriğine Merhaba Dünya yazmış olduk.

Bir başka örnek daha verelim:

for($sayi = 1; $sayi < 4; $sayi++) {
   $dosya_adi = 'Dosya' . $sayi . '.txt';
   touch($dosya_adi);
   
   $dosya = fopen($dosya_adi, 'w');
   fwrite($dosya, 'Bu ' . $sayi . '. dosyanın içeriği!');
   fclose($dosya);
}

Bu örnekte tam 3 tane txt dosyası (Dosya1.txt, Dosya2.txt, Dosya3.txt) oluşturup her birinin içerisine “Bu 1. dosyanın içeriği” şeklinde içerik eklemiş olduk.

PHP ile dosyaları silme

Dosya oluşturma fonksiyonunun zıttı olarak göreceğimiz unlink() fonksiyonu ile istediğiniz dosyayı yok edebilirsiniz.

Kullanımı oluşturma fonksiyonu gibi basit ve tek parametreli.

unlink('merhaba.txt');

Diğer örneklerde üzerinde çalıştığımız merhaba.txt dosyasını siler.

PHP’de dosyaların varlığını kontrol etmek

Dosyaların varlığından haberdar olmak, eğer varsa değiştirmek yoksa oluşturmak gibi işlemler yapmak için file_exists fonksiyonunu kullanacağız.

Parametresine gireceğimiz dosya adında bir dosya mevcut ise TRUE değil ise FALSE dönecektir. Hemen örnek ile gösterelim:

if(file_exists('merhaba.txt')) {
   echo 'Dosyamız var';
} else {
   echo 'Dosyamız yok';
}

Bir önceki konuda merhaba.txt dosyasını sildiğimiz için ekranda Dosyamız yok yazacaktır.