irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Web projeleri büyüdükçe dosyaları tek bir klasörde tutmak imkansız hale gelir. PHP, sunucu üzerinde dinamik olarak klasörler oluşturmanıza, bu klasörlerin içeriğini taramanıza ve ihtiyaç duyulmadığında onları temizlemenize olanak tanır.
mkdir() fonksiyonu, belirtilen isimde bir klasör oluşturur. Klasör oluştururken izinleri (0755 gibi) ve iç içe klasör yapısını (recursive) belirtmek önemlidir.
Bir klasörün içinde hangi dosyaların olduğunu görmek için scandir() kullanılır. Bu fonksiyon, içerideki tüm dosya ve alt klasör isimlerini bir dizi (array) olarak döndürür.
rmdir() fonksiyonu bir dizini siler. Ancak çok önemli bir kural vardır: Silinecek dizinin içi tamamen boş olmalıdır.
Eğer içi dolu bir klasörü tamamen silmek istiyorsanız, önce içindeki tüm dosyaları unlink() ile silen bir döngü yazmanız veya aşağıdaki gibi öz yinelemeli (recursive) bir fonksiyon kullanmanız gerekir:
Dizin yönetimi, sunucu kaynaklarını düzenli tutmak için hayati önem taşır. Klasör oluştururken 0755 iznini kullanmak güvenli bir standarttır; 0777 izni ise zorunlu kalmadıkça (güvenlik açığı yaratabileceği için) verilmemelidir. Her zaman işlem yapmadan önce file_exists() ile kontrol yapmayı alışkanlık haline getirin.
1. Yeni Dizin Oluşturma (mkdir)
mkdir() fonksiyonu, belirtilen isimde bir klasör oluşturur. Klasör oluştururken izinleri (0755 gibi) ve iç içe klasör yapısını (recursive) belirtmek önemlidir.
PHP:
<?php
$klasor_adi = "uploads/user_12";
// Klasör yoksa oluştur
if (!file_exists($klasor_adi)) {
// 0755: Standart yazma/okuma izni
// true: İç içe klasörleri (uploads varsa içine user_12) otomatik oluşturur
if (mkdir($klasor_adi, 0755, true)) {
echo "Dizin başarıyla oluşturuldu.";
} else {
echo "Dizin oluşturulamadı!";
}
} else {
echo "Bu isimde bir dizin zaten mevcut.";
}
?>
2. Dizin İçeriğini Listeleme (scandir)
Bir klasörün içinde hangi dosyaların olduğunu görmek için scandir() kullanılır. Bu fonksiyon, içerideki tüm dosya ve alt klasör isimlerini bir dizi (array) olarak döndürür.
PHP:
$dizin = "uploads/";
$dosyalar = scandir($dizin);
echo "<h3>Klasör İçeriği:</h3><ul>";
foreach ($dosyalar as $dosya) {
// "." (mevcut dizin) ve ".." (üst dizin) gizli nesnelerini filtrele
if ($dosya != "." && $dosya != "..") {
echo "<li>" . $dosya . "</li>";
}
}
echo "</ul>";
3. Dizin Silme (rmdir)
rmdir() fonksiyonu bir dizini siler. Ancak çok önemli bir kural vardır: Silinecek dizinin içi tamamen boş olmalıdır.
PHP:
$silinecek_dizin = "temp_data";
if (is_dir($silinecek_dizin)) {
if (rmdir($silinecek_dizin)) {
echo "Klasör başarıyla silindi.";
} else {
echo "Hata: Klasör boş olmayabilir veya izin hatası var.";
}
}
?>
Dizin Yönetimi Fonksiyonları Tablosu
| Fonksiyon | Görevi | Önemli Not |
|---|---|---|
| file_exists() | Dizin/Dosya var mı kontrol eder. | Hata almamak için işlem öncesi mutlaka kullanın. |
| is_dir() | Nesnenin bir klasör olup olmadığına bakar. | Dosyaları klasör sanmamak için gereklidir. |
| getcwd() | Mevcut çalışma dizinini verir. | Sunucu yolunu (Path) bulmak için kullanılır. |
| rename() | Klasör adını değiştirir. | Aynı zamanda klasörü taşımak için de kullanılır. |
4. Profesyonel İpucu: İçerik Doluyken Silme
Eğer içi dolu bir klasörü tamamen silmek istiyorsanız, önce içindeki tüm dosyaları unlink() ile silen bir döngü yazmanız veya aşağıdaki gibi öz yinelemeli (recursive) bir fonksiyon kullanmanız gerekir:
PHP:
function diziniSil($yol) {
if (!is_dir($yol)) return;
$nesneler = scandir($yol);
foreach ($nesneler as $nesne) {
if ($nesne != "." && $nesne != "..") {
if (is_dir($yol."/".$nesne))
diziniSil($yol."/".$nesne);
else
unlink($yol."/".$nesne);
}
}
rmdir($yol);
}
Sonuç
Dizin yönetimi, sunucu kaynaklarını düzenli tutmak için hayati önem taşır. Klasör oluştururken 0755 iznini kullanmak güvenli bir standarttır; 0777 izni ise zorunlu kalmadıkça (güvenlik açığı yaratabileceği için) verilmemelidir. Her zaman işlem yapmadan önce file_exists() ile kontrol yapmayı alışkanlık haline getirin.