Php Dersleri 8

melihbakir

LorD oF The WaReZ
Katılım
18 Haz 2005
Mesajlar
2,195
Reaction score
0
Puanları
0
Yaş
36
Konum
Ata'mın İzinden !..
Dosyalama ve Dizin İşlemleri

1. Dosyadan Okuma
2. Dosyaya Yazma
3. Dosya Kopyalama ve Silme
4. Mevcut Dosyaların Listelenmesi
5. Dizin Oluşturma
6. Dizin Kopyalama ve Silme
7. Dizinlerin Listelenmesi
8. Attribute ( Erişim İzinleri ve Deyimleri )


Hemen her programlama dili Dosyalama işlemlerini destekler. PHP'de bu işlemler için geniş pörtföye sahiptir. Bu işlemler dizisini madde madde ayrıntılarıyla inceleyip örneklendiricez.

Önce dosyalama işlemleri için temel prosedürleri maddeleyelim ;

a. Var olduğumuz dizini Tespit edelim
b. Dosyamızın var olduğundan emin olalım.
c. Çalışacağımız Dosyanın boyutunu öğrenelim
d. Dosya izinlerini kontrol edelim.
e. Dosyanın oluşturulduğu tarihi öğrenelim
f. Erişim izinleri tablosunu inceleyelim.


a. Var olduğumuz dizini Tespit edelim

Önce çalıştığımız alanı bulalım. Bu işlem için aşağıdaki basit komut dizisi işimizi görecektir.

<?
echo realpath(".");
?>

Bu komutları çalıştırdığımız takdirde karşımıza çalışan php dosyamızın sistem üzerinde hanki dizinde bulunduğunu gösterir. Dikkat edilmesi gereken husus tırnaklar içerisine yazdığımız değerdir. Biz yukardaki örnekte nokta girdik. Sistem dilinde nokta işareti mevcut dizini gösterir. İki nokta ".." bir alt dizini, "/" slaş işaretide kök dizini gösterir.

--------------------------------------------------------------------------------

b. Dosyamızın var olduğundan emin olalım.

Bir dosyanın var olduğunu aşağıdaki komut ile öğrenebiliriz.

<?
if ( file_exists("deneme.txt") ) { echo "Dosya var.";} else { echo "Dosya Yok";};
?>

Burada kullandığımız fonksiyon "file_exists()" dir. Parantez içerisine tırnaklar içerisine girdiğimiz veri var olduğundan emin olmak istediğimiz dosya olmalıdır. Dosya eğer mevcut ise "Dosya var." çıktısını alırız. Bu bölüme bir değişkende atayabilirdik. Kullanımı niteliklendirirsek girilen değerin dosyamı veya dizinmi olduğunuda öğrenebiliriz.

<?
if ( is_file("deneme.txt") { echo "Dosyadır."; } else { echo "Dosya değildir."; };
?>

Bu kodlarda girdiğimiz değerin bir dosyamı olduğunu bize verir.. Aynı işlemi dizin içinde gerçekleştirelim.

<?
if ( is_dir("deneme.txt") { echo "Dizindir."; } else { echo "Dizin değildir."; };
?>

Yukardaki komutlarda girilen değerin dizin olup olmadığını kontrol eder.


--------------------------------------------------------------------------------

c. Çalışacağımız Dosyanın boyutunu öğrenelim

Aşağıdaki kodlar ilede çalıştığımız dosyanın boyutunu öğreniyoruz.

<?
echo filesize("deneme.php");
?>

Bu değer bize dosya boyutunu "byte" cinsinden verir. Mevcut değerin KB karşılığını "1024" e bölersek KB, "1048576" ile çarparsakta MB cinsinden değeri bulmuş oluruz.


--------------------------------------------------------------------------------

d. Dosya izinlerini kontrol edelim.

Çalışıcağımız dosya üzerinde herzaman her işlemi yapamıyabiliriz. Dosya yazmaya izin vermeyebilir, veya aynı şekilde okunamazda olabilir. Bu kontrolleri aşağıdaki komutlarla yapabiliriz.

<?
if ( is_readable("deneme.php")) { echo "Dosya Okunabilir."; } else { echo "Dosyanın Okuma İzni Yok."; };
?>

Yukarıdaki kodlar dosyanın okuma izni olup olmadığını kontrol ederken ,

<?
if ( is_writable("deneme.php")) { echo "Dosya Yazılabilir"; } else { echo "Dosyanın Yazma İzni Yok."; };
?>

Bu kodlarda dosyanın yazma izni olup olmadığını kontrol eder.


--------------------------------------------------------------------------------

e. Dosyanın oluşturulduğu tarihi öğrenelim

Çalıştığımız dosyanın oluşturulma tarihini öğrenmek için aşağıdaki komutu kullanırız.

<?
echo date("d/m/y","deneme.php");
?>

Yukarıdaki komut bize dosyanın oluşturulma tarihini verir.


--------------------------------------------------------------------------------

f. Erişim izinleri tablosunu inceleyelim.

Şimdi dosya ve dizinler üzerinde çalışırken sıkça kullanacağımız erişim denetimlerine ait fonksiyon değerlerini inceleyelim. İlgili tablo aşağıdaki gibidir.

r Okunabilir
w Yazılabilir
a Dosya sonuna yazar.
r+ Okunabilir ve Yazılabilir
w+ Yazılabilir ve Okunabilir
a+ Dosya sonuna hem Okur hem Yazar

Yukardaki tablo çoğu dosyalama ve dizin üzerinde yaptığımız işlemlerde bize yardımcı olacak fonksiyonlarda kullanılacaktır.


--------------------------------------------------------------------------------

Dosyalama üzerine edinmemiz gereken temel bilgileri gördük. Şimdi uygulamalara geçebiliriz.


1. Dosyadan Okuma

Dosyalama işlemlerinde en çok kullanacağımız prosedürlerden biridir. Bir dosyayı okumak için aşağıdaki işlemi kullanırız.

deneme.txt adında bir dosya oluşturalım ve içerisindeki metni ekrana yazdıralım.

<?
readfile("deneme.txt");
?>

Görüldüğü üzre bir dosyanın içerisindeki bilgiyi okumak ve ekranda görüntüler. Çoğu programlama dilinde bir Metin dosyasının okunması için ayrıntılı ve komplike kodlar kullanılırken php bu işlem için oldukça kullanışlı bir fonksiyon verir bize.

Şimdi aynı işlemi bir diğer şekilde yapalım.

<?
$aktarim=file("deneme.txt";
echo join("",$aktarim);
?>

Bu şekildede bir metin dosyasının içeriğini alıp ekrana yazdırabiliriz. file() fonksiyonu metin okumak için hazırlanmamış olsada genel anlamı ile metin dosyaları için PHP tarafından atanmış bir fonksiyondur. Biz bu fonksiyonu bir metin dosyasının içeriğini ekrana yazmak için kullandık.

Şimdi birazdaha komplike bir örnek verelim ve hazır pasta yemiyelim, kendi pastamızı kendimiz yapalım.

<?
$islem=@fopen("deneme.txt",'r');
while ( ! feof ( $islem )) {
$aktarim= fgets ( $islem,10240 );
echo "$aktarim";
} fclose($islem);
?>

Bu kod dizisi bize "deneme.txt" dosyasının içerisindeki metin değerlerini ekrana yazdıracaktır. Kodları biraz inceleyelim.

$islem=@fopen() fonksiyonu dosya okuyabilmek için kullanılan profesyonel bir fonksiyondur. Bu fonksiyon ile $islem adında bir değişken atayıp okuma işlemini bu değişken vasıtası ile dosyanın içerisindeki veriyi ekrana yazdırırız. Bu bir dizi değişkenidir. Parantez içerisine gireceğimiz değer ("dosyaadi",'erisim') olacaktır. Tek tırnak içerisine dosyayı okumak için hangi erişim denetimi ile açacağımızı belirtir. Dosyanı yazma izni yok ise "w" seçeneğini belirtmemeliyiz.

while döngüsü ile değeri alırken parantez içerisinde "feof" değeri ile karşılaşırız. Bu değer "File end Of File" yani File değerinin sonuna gelene kadar demektir. ! ünlem işareti daha önceki dökümanlarda gördüğümüz üzre "Değil İse" anlamını taşır ve Dosya Sonu Değilse döngüye devam et anlamını taşır.

$aktarim değişkeni ilede veri alımının etaplarını bir değişken vasıtası ile kodumuza geçeriz. fgets değeri dosyanın içerisindeki veriyi alır, Burada kullanılan fonksiyonu incelersek fgets($islem,10240), $islem olarak dosyanın açıldığı dize değerini belirterek dosyayı 10'ar KB ile alacağımızı belirtiriz. Buraya 1 dersek dosyayı 1'er Byte olarak okur, 1024 yaparsak birer KB olarak okur.

echo "$aktarim"; diyerekte $aktarim değişkeni içerisindeki veriyi ekrana yazdırırız.

fclose($islem); diyerekte dosya okuma işlemini sonlandırdığımız belirterek kodumuzu tamamlarız.

Bir dizinin içerisindeki veriyi okumak için dosya adı bölümüne "dizin/dosyaadi" şeklinde girdi belirtmemiz gerekir. Bir alt dizindeki veriyi almak içinde "../dosya" şeklinde girebiliriz.

Görüldüğü üzere alanımız üzerindeki bir dosyayı bu şekildede rahatlıkla okuyabiliriz.



2. Dosyaya Yazma

Mevcut bir dosyaya bilgi girişi veya var olan bir dosyanın içerisindeki bilginin güncellenmesi ve sıfırdan yazılması için PHP ile aşağıdaki kodları kullanabiliriz.

<?
$metin="Ben bir Ceviz Ağacıyım, Gülhane Parkında..\n";
$islem=fopen("yenidosya.txt",'w');
fwrite($islem,$metin);
fclose($islem);
?>

Yukarıdaki işlem bize "yenidosya.txt" adında bir metin dosyası açıp içerisine $metin değişkeni içerisindeki veriyi girmemizi sağlar.

Yaptığımız işlemleri satır satır inceliyelim.

$metin değişkeni ile dosyamıza yazmak istediğimiz bilgiyi belirtiyoruz.

$islem değişkeninen fopen() fonksiyonunu atıyoruz ve ("dosyaadi",'erisim') şeklinde fonksiyonumuzu kullanıma açıyoruz. Bu fonksiyon bize yazma hakkı ile yeni bir dosya açıyor.

fwrite() fonksiyonu ilede ("işlemdeğişkeni",metin) şeklinde gireceğimiz veriyi dosyanın içerisine yazdırıyoruz.

fclose() fonksiyonu ile dosyalama işlemimizi sonlandırarak kod girişimizi tamamlıyoruz.
 
Görüldüğü üzere bir dosya oluşturmak ve içerisine veri girmek oldukça kolay ve pratik. Bu işlemi biraz daha teferruatlandıralım ve aynı metin dosyasının sonuna bir değer daha girelim.

<?
$metin="Ne sen bunun farkındasın, nede polis farkında.";
$islem=fopen("yenitosya.txt",'a');
fputs($islem,$metin);
fclose($islem);
?>

Bu kodlarlada yenidosya.txt dosyasının sonuna $metin değişkeninin içerisindeki veriyi ekliyoruz. Aradaki fark kullandımız fputs() fonksiyonudur. Bu fonksiyon ile dosyaya birşey yazarken dosyanın içerisindeki veriyi silmeden sonuna ekleriz.


3. Dosya Kopyalama ve Silme

PHP ile dosyalarımızı kopyalayıp silme olanağınada sahibiz. Bu işlemler için aşağıdaki kodları kullanabiliriz.

<?
copy("yenidosya.txt","yenidosya2.txt");
?>

yenidosya.txt'yi aynı içerik ile yenidosya2.txt dosya ismiyle kopyaladık. Görüldüğü üzere kullanımı gayet kolay, açıklamaya gerek yok. Dosya silmek içinde ;

<?
unlink("yenidosya2.txt")
?>

Kodlarını kullanabiliriz. Dosya silmek için "Unlink" komutunu kullanırız. Görüldüğü üzere bu işlemde oldukça basitdir.


4. Mevcut Dosyaların Listelenmesi

Kimi zaman alanımız üzerindeki dosyaları listelememiz gerekebilir. PHP bize bu olanağıda sağlar. Bu işlem için aşağıdaki komutlar işimizi görecektir.

<?
$islem=@opendir(".");
while (($tampon=readdir ($islem))){
if ( is_file($tampon)){echo "$tampon<br>";};
};
?>

Bu komutlar ile dizin olarak belirttiğimiz alandaki tüm dosyaları listeleriz. Komutları sırası ile inceleyelim.

$islem dizi değişkeninin içerisine @opendir() fonksiyonu ile değer girişine başladık. @opendir() fonksiyonu PHP'nin bize dosyalama işlemleri için atadığı fonksiyondur. Kullanımı oldukça basittir. @opendir(dizin) şeklinde atanabilir.

While döngüsü ilede $tampon adında bir tampon değişken atayıp $islem değişkeninin içerisindeki dizileri tek tek ayıklıyoruz ve readdir($islem) diyerek dizi değişkenini baz alarak dizindeki dosyaları readdir() fonksiyonu ile okuyoruz. Bu işlem bize dosya ve dizinlerin tümünü döndürür.

is_file fonksiyon değerini kullanarakta dönen değerlerin içerisinde dosya olanları ekrana yazdıracak bir sınama işlemi yapıyoruz.

Bu işlemler sonunda tüm dosyalar ( Gizli dosyalarda dahil ) listelenecektir.


5. Dizin Oluşturma

PHP ile dosyalama işlemlerindeki pratiklik dizin işlemlerindede geçerlidir. Dizin işlemlerine Basit bir örnekle giriş yapalım ve bir klasör oluşturalım.

<?
mkdir("Deneme",0777);
?>

Görüldüğü gibi PHP'De dosya işlemleri olduğu gibi dizin işlemleride aynı mantık ile çalışır. mkdir() fonksiyonunun kullanımı örnektede görüldüğü üzere mkdir("Klasör Adı", Erişim İzni) şeklindedir. 0777 erişim izni yani Attribute'dur. Bu değerler döküman sonunda ayrıntılı olarak anlatılacaktır.


6. Dizin Kopyalama ve Silme

Dizin kopyalama ve silme işlemleride dosyalama işlemlerinde olduğu gibidir. Hatta hemen hemen aynıdır diyebiliriz. Dizin kopyalama ve silme işlemleri için aşağıdaki kodlar işimizi görür.

<?
copy("Deneme","Deneme2");
?>

Yalnız bu fonksiyonu kullanırken dikkat edeceğimiz husus, Erişim denetimi yani "Permission" dur. Windows tabanlı sistemlerde bu kodu deniycek olursak bize Permission'lar izin vermiycektir. Her nekadar Attribute'u 777 bile olsa bu işlemi Windows tabanlı bir sistemde yapamayız. Unix sistemlerde Dizin kopyalama işlemi Erişim izni var ise rahatlıkla yapılabilir.

Mevcut bir klasörü silmek içinde Dosya işleminde kullanılan "Unlink" fonksiyonu kullanılır..

<?
rmdir("Deneme");
?>

Görüldüğü gibi Var olan bir dizini silmek için RmDir() fonksiyonunu kullanıyoruz. Hatırlıycak olursak dosya silmek için "Unlink" i kullanmıştık. dizin işlemlerinde kullanacağımız fonksiyon farklılık gösterir.


7. Dizinlerin Listelenmesi

Dizinlerin listelenmesi PHP'de dosyaların listelenmesi ile aynı fonksiyon ile kullanılır. Dosyaları listelediğimiz kodları hatırlıycak olursak küçük bir değişiklikle dizinleride listeleyebiliriz.

<?
$islem=@opendir(".");
while (($tampon=readdir ($islem))){
if ( is_dir($tampon)){echo "$tampon<br>";};
};
?>

Görüldüğü gibi yalnızca dizi değerinin bize dönen yanıtını sınarken is_file yerine is_dir fonksiyonunu kullandık.


8. Attribute ( Erişim İzinleri ve Deyimleri )

PHP ile dosyalama ve dizinler üzerinde yaptığımız işlemleri tamamladık. Şimdi dosyalama işlemlerinin erişim denetimlerini inceleyebiliriz. Unix ve türevi sistemlerde ( Linux, BSD, Vs. ) dosya ve dizin yapısı Windows'dakinden daha farklıdır. Her nekadar Windows üzerinde PHP çalıştırabiliyor olsakta PHP bize Unix'in temellerini baz alarak bu işlemleri yaptırır.. Bir dosyayı okumak, yazmak ve çalıştırmak için aşağıdaki şablonda anlatılan biçimde bu denetimleri sağlar.

Dosya Sahibi Gruplar Herhangi Bir Kullanıcı
Yazma 400 200 100
Okuma 40 20 10
Çalıştırma 4 2 1

Yukarıdaki tabloya göre örnek birkaç erişim denetimi için kod türetelim.

1. Yalnızca Yöneticinin Okuması, yazması ve çalıştırması mümkün olsun.
2. Yalnızca yöneticinin yazma izni olsun, diğer kullanıcılar okuyabilsin.
3. Tüm kullanıcılarda, yöneticide okuyup çalıştırabilsin ama yalnızca yönetici yazabilsin.
4. Tüm kullanıcılar ve yönetici okusun, yazsın ve çalıştırabilsin.

Şimdi tablodaki rakamları toplayarak Attribute Türetelim.

1. 700
2. 705
3. 755
4. 777

Görüldüğü üzere bu tablo ile Dosya erişimleri ve izinleri (Attributes) kontrol altında tutulur.. PHP ile dosya ve dizin işlemleri yapacak isek bu tabloyu benimsemek şartdır.
 
Geri
Üst