PHP Dosya İşlemleri

PHP’de dosya/dizin kontrolü, okuma-yazma, kopyalama/taşıma ve klasör listeleme gibi işlemler dosya fonksiyonları ile yapılır. Aşağıda en sık kullanılanlarını pratik örneklerle bulabilirsin.


Dosya var mı? file_exists()

Bir yolun (dosya ya da klasör) var olup olmadığını denetler. Varsa true, yoksa false döner.

Örnek: file_exists()
<?php
if (file_exists("dosya.txt")) {
    echo "Dosya/klasör var!";
} else {
    echo "Yok!";
}
?>
Not: Dosya mı, klasör mü?
file_exists() hem dosya hem klasör için true dönebilir. Tür ayırmak için: is_file("dosya.txt") (dosya mı?) / is_dir("klasor") (klasör mü?) kullanılır.

Dosya okunabilir mi? is_readable()

Dosyanın PHP tarafından okunabilir olup olmadığını kontrol eder.

Örnek: is_readable()
<?php
if (is_readable("dosya.txt")) {
    echo "Bu dosya okunabilir.";
} else {
    echo "Bu dosya okunamaz (izin/konum).";
}
?>

Dosya yazılabilir mi? is_writable()

Dosyanın PHP tarafından yazılabilir olup olmadığını kontrol eder.

Örnek: is_writable()
<?php
if (is_writable("dosya.txt")) {
    echo "Bu dosya yazılabilir.";
} else {
    echo "Bu dosyaya yazılamaz (izin/konum).";
}
?>

Dosya boyutu: filesize()

Dosyanın boyutunu byte cinsinden döndürür.

Örnek: filesize()
<?php
echo "Dosya boyutu (byte): " . filesize("dosya.txt");
?>

Dosya oluşturma ve silme: touch() / unlink()

touch() yoksa oluşturur (varsa tarihini günceller), unlink() dosyayı siler.

Örnek: touch() / unlink()
<?php
touch("dosya.txt");
echo "dosya.txt oluşturuldu.<br>";

unlink("dosya.txt");
echo "dosya.txt silindi.";
?>

Tek satırda okuma/yazma: file_get_contents() / file_put_contents()

Küçük/orta boyutlu dosyalar için en pratik yöntemdir: dosyanın tamamını okur veya yazar.

Örnek: oku + yaz + ekle
<?php
// Yaz (varsa üzerine yazar)
file_put_contents("notlar.txt", "Merhaba Dünya!\n");

// Ekle (sona ekler)
file_put_contents("notlar.txt", "Yeni satır eklendi.\n", FILE_APPEND);

// Oku (tamamını alır)
$icerik = file_get_contents("notlar.txt");
echo nl2br(htmlspecialchars($icerik));
?>
İpucu
Çok büyük dosyalarda tüm içeriği belleğe almak yerine fopen() + fgets()/fread() daha sağlıklıdır.

Klasör listeleme: scandir() / glob()

scandir() klasördeki her şeyi listeler. glob() ise desenle (ör. *.txt) filtreli liste verir.

Örnek: scandir()
<?php
$klasor = __DIR__ . "/dosyalar";
$liste = scandir($klasor);

foreach ($liste as $ad) {
    if ($ad === "." || $ad === "..") continue;
    echo $ad . "<br>";
}
?>
Örnek: glob() ile sadece .txt dosyaları
<?php
$dosyalar = glob(__DIR__ . "/dosyalar/*.txt");

foreach ($dosyalar as $yol) {
    echo basename($yol) . "<br>";
}
?>

Kopyalama / taşıma / yeniden adlandırma: copy() / rename()

copy() dosyayı kopyalar. rename() hem yeniden adlandırır hem de taşır.

Örnek: copy() + rename()
<?php
// Kopyala
copy("ornek.txt", "kopya_ornek.txt");

// Yeniden adlandır / taşı
rename("kopya_ornek.txt", __DIR__ . "/arsiv/kopya_ornek.txt");

echo "İşlem tamam.";
?>

Dosya yolu parçalama: pathinfo(), basename(), dirname()

Dosya adı, uzantı, klasör yolu gibi parçalara ayırmak için kullanılır.

Örnek: pathinfo()
<?php
$yol = "uploads/fotograflar/resim01.png";

$bilgi = pathinfo($yol);

echo "Dizin: " . $bilgi["dirname"] . "<br>";
echo "Dosya: " . $bilgi["basename"] . "<br>";
echo "Ad: " . $bilgi["filename"] . "<br>";
echo "Uzantı: " . $bilgi["extension"] . "<br>";

echo "<hr>";

echo "basename(): " . basename($yol) . "<br>";
echo "dirname(): " . dirname($yol) . "<br>";
?>

Klasik yöntem: fopen() ile okuma/yazma

Büyük dosyalarda satır satır okumak için fopen() + fgets() yaygındır.

Örnek: satır satır okuma (fgets)
<?php
$dosya_adi = "dosya.txt";
$dosya = fopen($dosya_adi, "r") or die("Dosya açılamıyor!");

while (!feof($dosya)) {
    $satir = fgets($dosya, 1024);
    echo htmlspecialchars($satir) . "<br>";
}

fclose($dosya);
?>
Dikkat
Ekrana basarken HTML bozulmasın diye htmlspecialchars() kullanmak iyi alışkanlıktır. Yazma işlemlerinde aynı anda iki işlem çakışmasın istersen flock() ile kilitleme eklenebilir.