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.
<?php
if (file_exists("dosya.txt")) {
echo "Dosya/klasör var!";
} else {
echo "Yok!";
}
?>
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.
<?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.
<?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.
<?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.
<?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.
<?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));
?>
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.
<?php
$klasor = __DIR__ . "/dosyalar";
$liste = scandir($klasor);
foreach ($liste as $ad) {
if ($ad === "." || $ad === "..") continue;
echo $ad . "<br>";
}
?>
<?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.
<?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.
<?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.
<?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);
?>
htmlspecialchars() kullanmak iyi alışkanlıktır.
Yazma işlemlerinde aynı anda iki işlem çakışmasın istersen flock() ile kilitleme eklenebilir.