PHP ile Dizin İşlemleri

PHP ile Dizin İşlemleri

PHP ile Dizin İşlemleri hakkında her şeyi öğrenin Dosya indirme, yükleme, silme ve dizinleri yönetme işlemlerini nasıl yapacağınızı öğrenin PHP eğitimlerimizle kodlama becerilerinizi geliştirin Hemen ziyaret edin

PHP ile Dizin İşlemleri

Merhaba, bu makalemizde PHP programlama dilinde dizin işlemleri hakkında bilmeniz gerekenleri ve kullanabileceğiniz yöntemleri ele alacağız. PHP ile dizinler üzerinde geniş bir yelpazede işlemler yapabilirsiniz. Dizinde oluşturma, yürütme, içerisindeki dosyaları listeleme ve silme, alt dizinleri listeleme gibi birçok işlemi gerçekleştirebilirsiniz.

Bu makalede sizlere mkdir(), chdir(), getcwd(), chroot(), rename(), opendir(), readdir(), rmdir(), unlink(), RecursiveDirectoryIterator ve GlobIterator fonksiyonları ile nasıl dizin işlemleri yapabileceğinizi göstereceğiz. Hem teorik hem de pratik örnek kodlarla birlikte dizin işlemleri hakkında bilgi sahibi olacaksınız.


Dizin Oluşturma

PHP'de dizin oluşturmak oldukça kolaydır. Dizin oluşturmak için mkdir() fonksiyonunu kullanabilirsiniz. Bu fonksiyon, ilk parametre olarak oluşturulacak dizinin yolunu, ikinci parametre olarak da izinleri alır. Örneğin:

mkdir('/home/user/new_folder', 0700);

Bu kod, /home/user dizininin içinde yeni bir new_folder adlı dizin oluşturur.

İzin parametresi, dizinin kullanıcı, grup ve diğer kullanıcılar tarafından okunabilir, yazılabilir ve çalıştırılabilir olup olmayacağını belirler. Bu parametre, sayısal bir değerdir ve 0'dan 777'ye kadar olan herhangi bir kombinasyonu olabilir. 0700, yani sayısal olarak 448, yani dizinin sadece sahibi tarafından okunabilir, yazılabilir ve çalıştırılabilir olduğunu belirtir.

Bunun yanı sıra, oluşturulacak dizinin içinde birden fazla alt dizin oluşturmak isterseniz, mkdir() fonksiyonunu recursive olarak kullanabilirsiniz. Bu sayede alt dizinler de oluşturulmuş olur.

mkdir('/home/user/new_folder/subfolder', 0700, true);

Bu kod, /home/user dizininin içinde yeni bir new_folder adlı dizin oluşturur ve içinde de subfolder adlı bir alt dizin oluşturur.

Dizin oluşturma adımı çok önemlidir. Çünkü diğer dizin işlemleri için önce dizinin oluşturulması gerekmektedir. Yani, oluşturulmayan bir dizinde işlem yapmak mümkün değildir.


Dizin Yürütme

PHP, web geliştirme sürecinde dizinlerle sık sık çalışmayı gerektirir. Bu nedenle, PHP ile dizin işlemlerinin temellerini öğrenmek önemlidir. Dizin işlemleri, yeni dizinler oluşturma, mevcut dizinlere erişim, dizin içerisindeki dosyaları listeleme veya silme, dizin adını değiştirme gibi işlemleri içerir. Bu makalede, dizinlerle ilgili işlemlere yönelik örnek kodlar ve yöntemler yer almaktadır.

chdir() fonksiyonu, PHP scriptinin çalıştığı dizini değiştirmek için kullanılır. Bu, farklı dizinler arasında geçiş yapmak için yararlıdır. Örneğin, belirli bir dizinde saklanan dosyalara erişmek veya dizin içerisindeki scriptleri çalıştırmak için kullanılabilir. chdir() fonksiyonunun örneği aşağıda verilmiştir:

chdir("dizin_yolu");

Yukarıdaki kod, script'in çalıştığı dizini "dizin_yolu" olarak değiştirir. "dizin_yolu" ifadesi tam bir dosya yolu veya göreli bir yol olabilir. Örneğin, "/home/kullanıcı/adresi" gibi tam bir yol veya "../adresi" gibi göreceli bir yol olabilir.

Ayrıca, getcwd() fonksiyonu da mevcut dizini almak için kullanılabilir. getcwd() fonksiyonunun örneği aşağıda verilmiştir:

$dizin_yolu = getcwd();

Yukarıdaki kod, $dizin_yolu değişkenine mevcut çalışma dizinini atar. Bu, dizinler arasında geçiş yapmadan, mevcut dizinin yolu ile ilgili bilgi edinmek için yararlıdır.


Aktif Dizin Almak

Aktif dizin, mevcut çalışılan dizini ifade eder. PHP'de, getcwd() fonksiyonunu kullanarak aktif dizinin yolunu alabilirsiniz. İlgili kod parçası aşağıda gösterilmiştir:

            $aktif_dizin = getcwd();        echo 'Aktif dizin: ' . $aktif_dizin;    

Bu kodda, $aktif_dizin değişkeni, getcwd() fonksiyonunun çağrılmasıyla oluşan aktif dizinin yolunu içerir. Ardından, aktif dizin kodu çıktıda yazdırılır.

Ayrıca, chdir() fonksiyonu kullanarak başka bir dizine geçtikten sonra, getcwd() fonksiyonunu çağırarak yeni aktif dizinin yolunu alabilirsiniz. Bu yöntem, işlemlerin yapılacağı dizini değiştirdiğinizde yararlıdır.


Bulunduğumuz Dizini Değiştirmek

PHP ile dizin işlemlerini yönetirken bulunduğumuz dizini değiştirmek isteyebiliriz. Bu durumda kullanabileceğimiz fonksiyon chdir() dir. Chdir() fonksiyonu ile bulunduğumuz dizini değiştirmek için öncelikle hedef dizinin yolunu parametre olarak göndermeliyiz.

Örneğin, /var/www/html klasöründe çalışıyoruz ve /var/www klasörüne geçmek istiyoruz. Bunun için aşağıdaki kodu kullanabiliriz:

chdir('/var/www');

Bu kod çalıştıktan sonra, artık işlemlerimiz /var/www klasörü altında gerçekleşecek.

Bu fonksiyon kullanılırken, dizin yolunun mutlaka doğru olması gereklidir. Eğer belirtilen dizin bulunamazsa, bir hata oluşur.

Aynı zamanda, chdir() fonksiyonu ile dizin değiştirirken, dizin işlemlerinde olası hataları yakalamak da önemlidir. Bunun için aşağıdaki kod bloğunu kullanabiliriz:

if (!chdir('/var/www')) {  die('Dizin değiştirilemedi');}

Bu kodda, chdir() fonksiyonu başarısız olursa die() fonksiyonu tarafından belirtilen hata mesajı ekrana yazılır.


Özel Yollar Kullanmak

Özel yollar, PHP ile dizin işlemlerinde oldukça kullanışlıdır. Özel yollar kullanarak dizin işlemleriniz daha güvenli ve kontrol altında olur. İşte chroot() fonksiyonu ile özel yollar kullanarak dizinlerde işlem yapmayı öğrenmeniz için gerekli bilgiler.

Öncelikle, chroot() fonksiyonu ile başka bir dizini özel yol olarak seçebilirsiniz. Bu yol, gerçek kök dizin olarak kullanılır ve tüm işlemler bu yolda gerçekleştirilir. Bu sayede, kök dizin ve ana dizin arasında ayrı bir izolasyon oluşur ve dizin işlemleri daha güvenli hale gelir.

Bunun için chroot() fonksiyonunu kullanabilirsiniz. Örneğin:

Kod Açıklama
chroot("/var/www"); /var/www dizinini özel yol olarak seçer.

Bu örnekte /var/www dizini özel yol olarak seçilir. Bu yol, kök dizin olarak seçildiğinde tüm işlemler bu dizinde gerçekleştirilecektir. Bu sayede, işlemler daha güvenli ve kontrol altında olacaktır.


Dizin Adını Değiştirmek

Bir dizin adını değiştirmek istiyorsanız, PHP'nin sağladığı rename() fonksiyonunu kullanabilirsiniz. Bu işlem için yapmanız gereken tek şey eski dizin adını ve yeni dizin adını belirtmektir. Aşağıdaki örnek, "eski_dizin_adi" adındaki dizinin adını "yeni_dizin_adi" olarak değiştirmektedir:

rename("eski_dizin_adi", "yeni_dizin_adi");

İşlemi gerçekleştirmeden önce, "eski_dizin_adi" adındaki dizinin, çalıştığınız dizinde olduğundan emin olun. Eğer dizinin tam yolunu kullanmak isterseniz, onu açıkça belirtmeniz gerekmektedir.

Bir hata oluşursa, rename() fonksiyonu "false" değerini döndürür. Hatanın nedenini öğrenmek için error_get_last() fonksiyonu kullanabilirsiniz. Örneğin:

if(!rename("eski_dizin_adi", "yeni_dizin_adi")) {  $hata = error_get_last();  echo "Hata: " . $hata['message'];}

Yukarıdaki örnekte, "rename()" fonksiyonu başarısız olursa, $hata değişkenine son hatanın ayrıntıları atanır ve bu ayrıntılar ekrana yazdırılır.


Dizin İçerisindeki Dosyaları Listelemek

Dizinlerdeki dosyaları listelemek, PHP ile oldukça kolaydır. opendir() ve readdir() fonksiyonları çeşitli seçenekleri destekler ve dizindeki dosyaları listeler.

opendir() fonksiyonu, belirtilen dizinden içeriği okumak için bir işaretçi döndürür. Bu işaretçi, diğer işlevlere değişken olarak aktarılarak kullanılır. readdir() işlevi, belirtilen dizin işaretçisinden bir sonraki dosya veya dizin adını döndürür.

Aşağıdaki örnek kod, verilen dizin yolundaki dosya ve dizinleri listeler:

```php// Dizin yolunu tanımlayın$dizin_yolu = "/home/user/documents";

// Dizini açın$dizin = opendir($dizin_yolu);

// Dosya ve dizinleri listelewhile (($dosya = readdir($dizin)) !== false) { echo "$dosya\n";}

// Dizini kapatınclosedir($dizin);```

Bu kod, "/home/user/documents" dizinindeki tüm dosya ve dizinleri listeler. readdir() işlevi, bir "false" değeri döndürdüğünde döngü sona erer. Dizi elemanlarını listelemek için foreach döngüsü de kullanılabilir.

Dizindeki dosyaları sıralamak isteyebilirsiniz. Bunun için sort() işlevini kullanabilirsiniz. Aşağıdaki örnek kod, dosyaları alfabetik olarak sıralar:

```php// Dizini açın$dizin = opendir($dizin_yolu);

// Dosya ve dizinleri listele$dosyalar = array();while (($dosya = readdir($dizin)) !== false) { if ($dosya != "." && $dosya != "..") { $dosyalar[] = $dosya; }}sort($dosyalar);

// Sıralanmış dosyaları listeleforeach ($dosyalar as $dosya) { echo "$dosya\n";}

// Dizini kapatınclosedir($dizin);```

Bu kod, "." ve ".." klasörlerinin yanı sıra dosyaları da sıralamaktan kaçınmak için kontrol ifadeleri kullanır. sort() işlevi, dosya listesini alfabetik olarak sıralar.

Dizindeki dosyaların türlerini belirlemek isteyebilirsiniz. Dosyaların uzantılarına göre gruplandırmak için aşağıdaki örnek kod kullanılabilir:

```php// Dizini açın$dizin = opendir($dizin_yolu);

// Dosya türlerine göre gruplandırma$dosya_grupları = array();while (($dosya = readdir($dizin)) !== false) { if ($dosya != "." && $dosya != "..") { $uzantı = pathinfo($dosya, PATHINFO_EXTENSION); if (empty($uzantı)) { // Dizinleri bir grup olarak ele alın $dosya_grupları["Dizinler"][] = $dosya; } else { // Dosyaları uzantılarına göre gruplandırın $dosya_grupları[$uzantı][] = $dosya; } }}

// Dosya gruplarını listeleforeach ($dosya_grupları as $grup_adı => $dosyalar) { echo "\n"; echo "

    \n"; foreach ($dosyalar as $dosya) { echo "
  • $dosya
  • \n"; } echo "
\n";}

// Dizini kapatınclosedir($dizin);```

Bu kod, dizine giren tüm dosyaları uzantılarına göre gruplandırır ve listeler. Dizinler, "Dizinler" adlı bir grup olarak ele alınır. Dosya türüne göre gruplandırma yapmak, dosyaları daha kolay yönetsel hale getirebilir ve sınıflandırabilirsiniz.


Dizin İçerisindeki Dosyaları Silmek

Bir dizindeki dosyaların silinmesi, yönetim açısından oldukça önemlidir. İşletim sistemlerinde, klasörler ve dosyalar dosyaların taşınması, yeniden adlandırılması ve silinmesi gibi işlemlerle yönetilir. Bu yönetim işleri, PHP ile de yapılabilir. İki farklı yöntemle bir dizindeki dosyalar silinebilir: rmdir() ve unlink() fonksiyonları.

rmdir() fonksiyonunu kullanarak dizin içerisindeki dosyaları silebilirsiniz. Bu fonksiyon, sadece boş dizinlerin silinmesine izin verir. Eğer dizinde bir alt dizin ya da dosya bulunursa, işlem gerçekleşmez.

Fonksiyon Açıklama
rmdir() Sadece boş dizinleri siler. Alt dizin ya da dosya varsa işlem gerçekleşmez.
unlink() Dosya veya belirtilen klasörü siler.

unlink() fonksiyonu, belirtilen dosyayı veya klasörü siler. Bu komut, dizin içerisindeki tüm dosyaları silmek için kullanılabilir. Bu yöntemde belirtilen klasör altında bulunan tüm dosyalar ve alt klasörler de silinir. O yüzden unlink() fonksiyonunun kullanımında çok dikkatli olmak gerekir.

Dizin içerisindeki dosyaların silinmesi, işletim sisteminin klasör ve dosya yönetiminde oldukça etkili bir araçtır. Bu araç, PHP ile birlikte kullanılarak, birçok farklı dosya ve klasör işlemini otomatik hale getirebilirsiniz.


Sadece Boş Dizinleri Silmek

Bir dizini silmek için bizim rmdir() fonksiyonunu kullanabiliriz. Ancak, yalnızca boş dizinleri silebiliriz. Bu nedenle, bir dizindeki tüm dosyaların silinmesi için dosya silme fonksiyonuna başvurmalıyız.

Bir dizini silmek için, öncelikle is_dir() fonksiyonu ile verilen yolun bir dizin olup olmadığını kontrol edin. Dizin değilse, silinemez demektir. Dizin varsa, rmdir() fonksiyonu kullanılarak yalnızca boş dizinler silinebilir. Silme işlemi, boş dizinler yanı sıra alt dizinlerin de boş olması gerektiği anlamına gelir. Bu nedenle, alt dizinlerdeki tüm dosyaların silinmesi gereklidir.

Bir dizini silmek için kullanabileceğimiz kod örneği aşağıdaki gibidir:

Kod Örneği:
if(is_dir($dizin)){ $icerik = scandir($dizin); foreach ($icerik as $dosya) { if ($dosya != '.' && $dosya != '..') { unlink($dizin . '/' . $dosya); } } rmdir($dizin); }

Bu kod örneği, ilk olarak verilen yolun bir dizin değeri olup olmadığını kontrol eder. Dizin ise, tüm dosyalar silinir ve en son olarak rmdir() fonksiyonu kullanılarak dizin silinir.


Tüm Alt Dizinleri Listelemek

Tüm alt dizinleri listelemek, büyük ve karmaşık bir yapıda olan bir web sitesi için oldukça önemlidir. Bu işlem, sitenizin arama motorları için daha kolay ve anlaşılır olmasını sağlar. Bunun için ise RecursiveDirectoryIterator sınıfını kullanabilirsiniz.

RecursiveDirectoryIterator sınıfı, içerisinde alt dizinleri olan bir dizinde yer alan tüm dosya ve alt dizinleri tek tek listeler. Bu sayede sitenizin tamamını kapsayacak şekilde alt dizinleri de listelemiş olursunuz.

Bu işlemi gerçekleştirmek için önce RecursiveDirectoryIterator sınıfını kullanarak bir nesne oluşturmanız gerekmektedir. Bu nesne, dizin yapısını listeleyebilmenizi sağlar. Ardından IteratorIterator sınıfını kullanarak, RecursiveDirectoryIterator sınıfını bir döngüye sokabilirsiniz. Bu döngü sayesinde tüm alt dizinleri kolaylıkla listelemiş olursunuz.

Code:
$directory = new RecursiveDirectoryIterator('/var/www/html/');$iterator = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::SELF_FIRST); foreach ($iterator as $file) {    echo $file.'
';}

Bu kod parçasında öncelikle /var/www/html/ dizininde yer alan tüm dosya ve alt dizinlerin listesi alınmaktadır. Daha sonra RecursiveIteratorIterator sınıfı kullanılarak, tüm alt dizinler tek tek listelenmektedir. Son olarak ise foreach döngüsü içerisinde, listelenen her bir dosya ve alt dizin ekrana yazdırılmaktadır.

Bu yöntem sayesinde sadece ana dizinleri değil, alt dizinleri de dikkate alarak tüm dosyaları listeleyebilirsiniz. Bu da sitenizin arama motorları için daha anlaşılır hale gelmesini sağlar.


Tüm Dizinleri Listelemek

PHP ile dizin işlemleri yaparken, tüm dizinleri listelemek önemli bir adımdır. Tüm dizinleri listelemek için kullanabileceğiniz en iyi yöntemlerden biri GlobIterator sınıfıdır. Bu yöntemle, belirli bir kalıba uyan tüm dizinleri görüntüleyebilirsiniz.

GlobIterator sınıfı, toplama tanımlayıcısına benzeyen bir özellik kullanarak dizinleri listeler. Bu özellik, dizi içerisinde tam yol adlarının bir listesini döndürür. Bu özellik, dizin adının bir bölümünü veya tamamını aramak için kullanılabilir.

Bir örnek vermek gerekirse, "/var/www" dizinindeki tüm dizinleri listelemek istiyorsanız, aşağıdaki kodu kullanarak bu işlemi gerçekleştirebilirsiniz:

Kod
$dirs = new GlobIterator('/var/www/*', GlobIterator::KEY_AS_FILENAME | GlobIterator::CURRENT_AS_PATHNAME | GlobIterator::SKIP_DOTS | GlobIterator::UNIX_PATHS);

Yukarıdaki kod, "/var/www" dizinindeki herhangi bir alt dizindeki tüm dizinleri görüntüler. Ayrıca, isimleri "." veya ".." ile başlayan dizinleri görmezden gelir.

GlobIterator sınıfı, herhangi bir dizindeki tüm alt dizinleri listeleme işlemini hızlı ve kolay bir şekilde gerçekleştirmenizi sağlar.