25 Haziran 2007 Pazartesi

PHP ile Dosya ve Klasör Fonksiyonları

Merhaba Webkolog takipçileri!

Bir web uygulamasının temelinde, dosya sistemiyle etkileşim kurma yeteneği yatar. Resim yüklemek, metin dosyalarını kaydetmek, log tutmak, klasörleri yönetmek gibi pek çok işlem, doğrudan sunucunun dosya ve klasör yapısıyla ilgilidir. PHP, bu tür görevleri kolayca yerine getirmemiz için bize çok zengin bir dosya ve klasör fonksiyonları kütüphanesi sunar. Bu makalede, bu fonksiyonların nasıl kullanılacağını ve dosya sistemi üzerinde nasıl tam kontrol sağlayacağımızı öğreneceğiz. Hadi gelin, sunucumuzun diskinde gezinmeye başlayalım!


1. Dosya Bilgileri ve Kontrolü

Bir dosyanın var olup olmadığını, boyutunu, türünü veya erişim izinlerini kontrol etmek, dosya işlemleri öncesinde yapılması gereken önemli adımlardır.


<?php
$dosya = "ornek.txt"; // Bu dosyanın mevcut olduğunu varsayalım.
$klasor = "yedekler"; // Bu klasörün mevcut olduğunu varsayalım.

// Bir dosyanın var olup olmadığını sınar: file_exists()
if (file_exists($dosya)) {
    echo $dosya . " dosyası mevcut.<br>";
} else {
    echo $dosya . " dosyası mevcut değil.<br>";
}

// Dosyanın boyutunu byte olarak verir: filesize()
if (file_exists($dosya)) {
    echo $dosya . " boyutu: " . filesize($dosya) . " byte.<br>";
}

// Dosyanın türünü verir (file, dir, link vb.): filetype()
if (file_exists($dosya)) {
    echo $dosya . " türü: " . filetype($dosya) . "<br>"; // Çıktı: file
}
if (file_exists($klasor)) {
    echo $klasor . " türü: " . filetype($klasor) . "<br>"; // Çıktı: dir
}

// Dosyanın okunabilir olup olmadığını kontrol eder: is_readable()
if (is_readable($dosya)) {
    echo $dosya . " okunabilir.<br>";
}

// Dosyanın yazılabilir olup olmadığını kontrol eder: is_writable()
if (is_writable($dosya)) {
    echo $dosya . " yazılabilir.<br>";
}

// Dosyanın çalıştırılabilir olup olmadığını kontrol eder: is_executable()
if (is_executable($dosya)) { // Genelde betik dosyaları veya programlar için
    echo $dosya . " çalıştırılabilir.<br>";
}

// Verilen adresin geçerli bir dosya olup olmadığını kontrol eder: is_file()
if (is_file($dosya)) {
    echo $dosya . " geçerli bir dosya.<br>";
}

// Verilen adresin bir dizin (klasör) olup olmadığını kontrol eder: is_dir()
if (is_dir($klasor)) {
    echo $klasor . " geçerli bir klasör.<br>";
}
?>

2. Dosya Yolu ve İsim Bilgileri

Bir dosya yolundan sadece dosya adını veya klasör adını almak, dosya sisteminde gezinirken oldukça işinize yarar.


<?php
$dosyaYolu = "/var/www/html/projelerim/index.php";

// Fonksiyona verilen adres parametresi için dosya ismini verir: basename()
echo "Dosya adı: " . basename($dosyaYolu) . "<br>"; // Çıktı: index.php
echo "Dosya adı (uzantısız): " . basename($dosyaYolu, ".php") . "<br>"; // Çıktı: index

// Fonksiyona verilen adres metni parametresi için geçerli klasör ismini verir: dirname()
echo "Klasör yolu: " . dirname($dosyaYolu) . "<br>"; // Çıktı: /var/www/html/projelerim
?>

3. Dosya Oluşturma, Kopyalama, Yeniden Adlandırma ve Silme

Dosyalar üzerinde temel CRUD (Create, Read, Update, Delete) işlemlerini gerçekleştiren fonksiyonlar.


<?php
$kaynakDosya = "ornek.txt"; // Bu dosyanın mevcut olduğunu varsayalım.
$hedefDosya = "kopyalanan_ornek.txt";
$yeniAd = "yeniden_adlandirildi.txt";
$silinecekDosya = "silinecek.txt";

// Boş bir dosya oluşturur veya zaman damgasını günceller: touch()
if (touch("yeni_dosya.txt")) {
    echo "yeni_dosya.txt başarıyla oluşturuldu/güncellendi.<br>";
} else {
    echo "yeni_dosya.txt oluşturulamadı/güncellenemedi.<br>";
}

// Bir dosyayı kopyalar: copy()
if (copy($kaynakDosya, $hedefDosya)) {
    echo $kaynakDosya . " başarıyla " . $hedefDosya . " olarak kopyalandı.<br>";
} else {
    echo $kaynakDosya . " kopyalanamadı.<br>";
}

// Dosyanın ismini değiştirir: rename()
if (rename($hedefDosya, $yeniAd)) {
    echo $hedefDosya . " başarıyla " . $yeniAd . " olarak yeniden adlandırıldı.<br>";
} else {
    echo $hedefDosya . " yeniden adlandırılamadı.<br>";
}

// Bir dosyayı yok etmek için kullanılır: unlink()
// Bu satırı çalıştırmak için "silinecek.txt" adlı bir dosya oluşturmanız gerekebilir.
/*
if (file_exists($silinecekDosya)) {
    if (unlink($silinecekDosya)) {
        echo $silinecekDosya . " başarıyla silindi.<br>";
    } else {
        echo $silinecekDosya . " silinemedi.<br>";
    }
}
*/
?>

4. Dosya İçeriği Okuma ve Yazma

Dosyaları açmak, okumak, yazmak ve kapatmak, dinamik içerik oluşturmanın temelidir.


<?php
$dosya = "veriler.txt";

// Dosya açmak için: fopen()
// "w" modu: yazma modu, dosya yoksa oluşturur, varsa içeriğini siler.
$dosyaIsleyici = fopen($dosya, "w");
if ($dosyaIsleyici) {
    // Dosyaya yazmak: fwrite() veya fputs()
    fwrite($dosyaIsleyici, "Merhaba Webkolog!\n");
    fputs($dosyaIsleyici, "Bu benim PHP dosya yazma örneğim.\n");
    fclose($dosyaIsleyici);
    echo $dosya . " dosyasına yazma işlemi tamamlandı.<br>";
} else {
    echo $dosya . " dosyası açılamadı/oluşturulamadı.<br>";
}

// Dosyayı okumak için: fopen() ile "r" modu
$dosyaIsleyici = fopen($dosya, "r");
if ($dosyaIsleyici) {
    echo "<h5>" . $dosya . " içeriği:</h5>";
    // Dosyanın sonuna gelinip gelinmediğini kontrol eder: feof()
    // Satır satır okumak: fgets()
    while (!feof($dosyaIsleyici)) {
        echo fgets($dosyaIsleyici) . "<br>";
    }
    fclose($dosyaIsleyici);
}

echo "<hr>";

// Tüm dosya içeriğini okuyup çıktı olarak verir: readfile()
echo "<h5>readfile() ile " . $dosya . " içeriği:</h5>";
readfile($dosya);
echo "<br>";

echo "<hr>";

// Tüm dosya içeriğini bir string olarak alır: file_get_contents()
if (file_exists($dosya)) {
    $icerik = file_get_contents($dosya);
    echo "file_get_contents ile alınan içerik: <pre>" . htmlspecialchars($icerik) . "</pre>";
}

// Bir stringi dosyaya yazar: file_put_contents()
$yeniIcerik = "Bu yeni bir metin.\nBu da ikinci satır.";
if (file_put_contents("yeni_metin.txt", $yeniIcerik)) {
    echo "yeni_metin.txt dosyasına yazma başarılı.<br>";
}

// CSV formatlı dosyaları okumak için: fgetcsv()
// Örnek bir CSV dosyası oluşturalım
$csvDosya = "veriler.csv";
$csvVeri = "isim,yas,sehir\nAli,30,Ankara\nVeli,25,İzmir";
file_put_contents($csvDosya, $csvVeri);

$csvHandle = fopen($csvDosya, "r");
if ($csvHandle) {
    echo "<h5>CSV Dosyası İçeriği (fgetcsv):</h5>";
    while (($satir = fgetcsv($csvHandle)) !== FALSE) {
        echo implode(" | ", $satir) . "<br>";
    }
    fclose($csvHandle);
}
?>

5. Klasör İşlemleri ve Yönetimi

Klasör oluşturmak, silmek, içeriğini listelemek veya mevcut klasörü değiştirmek için kullanılan fonksiyonlar.


<?php
$yeniKlasor = "test_klasoru";
$silinecekKlasor = "bos_klasor";

// Yeni bir klasör oluşturur: mkdir()
if (!is_dir($yeniKlasor)) {
    if (mkdir($yeniKlasor)) {
        echo $yeniKlasor . " klasörü başarıyla oluşturuldu.<br>";
    } else {
        echo $yeniKlasor . " klasörü oluşturulamadı.<br>";
    }
}

// Geçerli çalışma dizinini döndürür: getcwd()
echo "Mevcut çalışma dizini: " . getcwd() . "<br>";

// Klasör değiştirmek için: chdir()
// if (chdir($yeniKlasor)) {
//     echo "Dizin " . $yeniKlasor . " olarak değiştirildi. Yeni dizin: " . getcwd() . "<br>";
//     // İşlemler sonrası geri dönmek isteyebilirsiniz
//     // chdir("..");
// }

// Klasör içeriğini okumak ve listelemek: opendir(), readdir(), closedir()
$dizinAcici = opendir('.'); // Mevcut dizini aç
if ($dizinAcici) {
    echo "<h5>Mevcut Dizin İçeriği:</h5>";
    while (($eleman = readdir($dizinAcici)) !== false) {
        echo "- " . $eleman . "<br>";
    }
    closedir($dizinAcici);
}

// Dosya desenine göre arama yapar: glob()
echo "<h5>'o' harfi ile başlayan dosyalar (glob):</h5>";
$eslesenler = glob("o*.txt"); // 'o' ile başlayan .txt dosyaları
foreach ($eslesenler as $dosyaAdi) {
    echo "- " . $dosyaAdi . "<br>";
}

// Bir klasörü yok etmek için kullanılır: rmdir() (klasör boş olmalı)
// Bu satırı çalıştırmak için "bos_klasor" adında boş bir klasör oluşturmanız gerekebilir.
/*
if (is_dir($silinecekKlasor)) {
    if (rmdir($silinecekKlasor)) {
        echo $silinecekKlasor . " klasörü başarıyla silindi.<br>";
    } else {
        echo $silinecekKlasor . " klasörü silinemedi (boş olmayabilir veya izin hatası).<br>";
    }
}
*/
?>

6. Dosya İstatistiklerini Temizleme: clearstatcache()

PHP, dosya bilgileri (boyut, değişiklik zamanı vb.) için bir önbellek tutar. Eğer aynı dosyaya art arda erişiyor ve o dosyanın dışarıdan değişme ihtimali varsa, önbelleği temizleyerek en güncel bilgiyi almayı garantileyebilirsiniz.


<?php
// clearstatcache() kullanımı örneği
// Bir dosya oluşturup boyutunu kontrol edelim
file_put_contents("test_cache.txt", "İlk içerik");
echo "İlk boyut: " . filesize("test_cache.txt") . "<br>"; // Çıktı: 12

// Dosyayı dışarıdan değiştirdiğimizi varsayalım (veya başka bir PHP işlemiyle)
// Normalde bu satır başka bir yerde olur veya manuel olarak dosyayı büyütürsünüz
file_put_contents("test_cache.txt", "Daha uzun bir içerik, bu da biraz daha uzun.");

// Önbellek temizlenmezse eski boyutu gösterebilir
echo "Önbellek temizlenmeden boyut: " . filesize("test_cache.txt") . "<br>"; // Muhtemelen hala 12

// clearstatcache() ile önbelleği temizle
clearstatcache();
echo "Önbellek temizlendikten sonra boyut: " . filesize("test_cache.txt") . "<br>"; // Çıktı: 42 (yeni boyut)

unlink("test_cache.txt"); // Örnek dosyasını temizleyelim
?>

PHP'nin dosya ve klasör fonksiyonları, web uygulamalarınızın sunucu üzerindeki dosyalarla ve dizinlerle güvenli ve etkili bir şekilde etkileşim kurmasını sağlar. Güvenlik izinlerine dikkat ederek, dosya okuma/yazma işlemlerini doğru bir şekilde yöneterek ve hata kontrollerini yaparak sağlam uygulamalar geliştirebilirsiniz. Bu fonksiyonlar, basit bir dosya yüklemeden karmaşık bir içerik yönetim sistemine kadar her türlü ihtiyacınızı karşılayacak esnekliği sunar!

Webkolog'u takipte kalın!

Hepinize bol kodlu ve başarılı projeler dilerim!

0 yorum:

Yorum Gönder