PHP dizin işlemleri

[KRSAG=https://forum.mevsim.org/makale/dizinler.png]PHP dizin işlemleri[/KRSAG]

PHP ile dizin işlemleri sayesinde yeni dizinler oluşturabilir, dizinleri taşıyabilir, yeniden adlandırabilir, silebilir ve içinde neler olduğunu gösterebiliriz.

Web tabanlı dosya yöneticisi gibi bir yazılım yapmak ya da dosya upload çalışmalarına girişmek için öğrenmemiz gereken konulardan bir tanesi olan dizin işlemleri sayesinde tüm dosya yönetimi olaylarına el atmış bulunuyoruz.

Dosya işlevlerinde olduğu gibi dizin işlemlerinde de çoğu çalışmayı fonksiyonlar ile yapacağız. Bir önceki derste anlattığım gibi dizin olayları için de izin ve yetkiye ihtiyacımız olacak.
PHP ile bir dizin oluşturmak
Yeni bir klasör oluşturmak şeklinde de değerlendirebileceğimiz bu olayı mkdir() fonksiyonu sayesinde gerçekleştiririz. Bir parametre ile çalışır, ama eğer istersen 2. parametre ile dosya CHMOD değerini belirtebilirsin.
PHP:
mkdir('merhaba');
Yukarıdaki örneği çalıştırdığımızda çalıştırdığımız dizinin içerisinde merhaba adında yeni bir klasör oluşturmuş oluruz.

Eğer oluşturacağımız yeni dizinin CHMOD değerinide ifade etmek isteyecek olursak 2. parametreyi devreye sokuyoruz.

2. Parametreyi kullanmazsak varsayılan değeri “0777” yani tüm izinleri verilmiş durumda olur.
PHP:
mkdir('yenidizin', '0655');

Bu örnekte de yenidizin adında bir dizin oluşturup 0655 CHMOD değeri vererek yazma iznini iptal etmiş olduk.
PHP ile bir dizini silmek
Varolan dizinleri silmek için rmdir() fonksiyonunu kullanırız. Bu fonksiyon ile sileceğimiz dizininin içerisi boş olmak zorundadır. Eğer dolu bir dizini bu şekilde silmeye kalkışırsak PHP kızıp hata gösterecektir.

Dolu bir dizini olduğu gibi silmek istiyorsak eğer, o zaman önce diğer dersde anlattığımız unlink() fonksiyonunu kullanarak tüm içeriği silmemiz gerekecek.
PHP:
rmdir('merhaba');

Bu örnek çalıştığında merhaba adında bir dizin kalmamış olur.
PHP ile dizinlerin ya da dosyaların adını değiştirme ve taşıma
Aslında dizinlerin ya da dosyaların adını değiştirmek ile taşımak aynı şey diyebiliriz. Garip gelsede ismini değiştirdiğinizde aslında onu bir nevi taşımış olursunuz.

Bu işi rename() fonksiyonu ile gerçekleştireceğiz. İki parametre ile çalışan bu fonksiyonun ilk parametresine taşıyacağımız ya da değiştireceğimiz, dosya ya da dizin adın, ikinci parametreye ise taşıyacağımız yolu yazarız.
PHP:
rename('eski', 'yeni');
Yukarıdaki örnek çalıştığında eski adında klasörü yeni adında değiştirir.

Aynı şekilde dizin yerine bir dosya uzantısı ve adı belirttiğimizde bu sefer değiştirme işini dosya üzerinde yapacaktır.
PHP:
rename('resim.jpg', 'manzara.jpg');
Bu çalışmada da resim.jpg adındaki dosyamızın adını manzara.jpg olarak değiştirecektir.

Yine benzer şekilde ikinci parametrede farklı bir dizin belirttiğimizde dosyayı o dizine taşıyacaktır.
PHP:
rename('resim/bir.jpg', 'manzaralar/resim.jpg');

Burada resim klasörü içindeki bir.jpg dosyasını manzaralar klasörüne taşıyıp adını resim.jpg olarak değiştirmiş olduk.
PHP ile dizin içerisindekileri okuma
Bir dizinin içerisinde bulunan tüm dosyaları listelemek için iki fonksiyona ve bir while döngüsüne ihtiyacımız var.

İlk olarak opendir() fonksiyonu ile aynı fopen() ile dosya açmadaki mantık gibi dizini açarız. Ardından dizini bağlantısını yüklediğimiz değişkeni readdir() fonksiyonu ve while döngüsü ile bağlayıp tüm dizinin içeriğine ulaşırız.
Kod:
$dizin = opendir('dosyalar');
while($dosya = readdir($dizin)) {
   echo $dosya . ' <br/>';
}
Burada dikkatinizi çekecek mevzu while döngüsü içinde kullandığım koşul olabilir. Tek eşittir işareti kullandığımız bu koşulda amaç diğer koşullara göre farklıdır.

Bu özel yöntem sayesinde döngü tüm dizindeki dosyaları sayana kadar tek tek dönecektir.

Ekranda da dosyalar dizininin içeriğine göre dosya adları sırayla yazacaktır.

Örneğin içinde resim.jpg, dosya.rar ve müzik.mp3 dosyası olan dosyalar dizininde ekrandaki çıktı:
Kod:
.
..
resim.jpg
dosya.rar
müzik.mp3
Şeklinde olacaktır. Burada ilk çıkan . ve .. işaretleri bir alt dizini ve şuanki dizini ifade eder. İstersen o işaretleri bir if ifadesi ile saf dışı bırakıp sadece içeriğe ulaşabilirsin.
 
Üst
Alt