Anasayfa / PHP / PHP Dosya İşlemleri

PHP Dosya İşlemleri

Web geliştirme serüvenimizde şu ana kadar değişkenleri, döngüleri, fonksiyonları ve veri tabanlarını inceledik. Ancak ünlü şair John Donne’un “Hiçbir insan bir ada değildir” sözü, yazdığımız PHP betikleri için de son derece geçerlidir. Yazdığımız programlar genellikle kendi başlarına kapalı kutular olarak kalamazlar; metin dosyalarından veri okumak, kullanıcıların yüklediği resimleri işlemek, yapılandırma (ayar) dosyaları oluşturmak veya hata kayıtlarını (log) bir metin dosyasına yazmak zorundadırlar.

Neyse ki PHP, dosya ve dizin (klasör) işlemleri için 70’ten fazla yerleşik fonksiyon sunan oldukça zengin bir kütüphaneye sahiptir. Bu rehberde, PHP ile dosyaları nasıl okuyacağınızı, yazacağınızı, sileceğinizi ve klasörler arasında nasıl gezineceğinizi gerçek dünya örnekleriyle, sıfırdan öğreneceksiniz.

1. Altın Kural: Dosya Gerçekten Orada Mı? (file_exists)

Dosyalarla çalışırken yapılan en büyük hata, olmayan bir dosyayı okumaya veya silmeye çalışmaktır. Olmayan bir dosyaya erişmeye çalışmak PHP’nin ölümcül (fatal) bir hata vermesine veya sayfanızın çökmesine neden olabilir. Bu durumu önlemek için herhangi bir işlem yapmadan önce file_exists() fonksiyonunu kullanmalıyız. Bu fonksiyon, içine yazdığımız dosya veya klasör yolunun sistemde var olup olmadığını kontrol eder.

<?php
$dosya = 'ayarlar.txt';

if (file_exists($dosya)) {
    echo "Harika, dosya bulundu! İşlemlere başlayabiliriz.";
} else {
    echo "Hata: Belirtilen dosya mevcut değil.";
}
?>

2. PHP ile Dosya Okuma İşlemleri

PHP’de bir dosyanın içeriğini okumanın, ihtiyacınıza göre değişen birden fazla yolu vardır.

A. Tüm İçeriği Tek Seferde Okumak: file_get_contents()

Bir dosyanın içindeki tüm metni tek bir hamlede, bir String (metin) değişkenine aktarmanın en kolay yolu file_get_contents() fonksiyonudur.

<?php
// Dosyadaki tüm metni okuyup ekrana yazdırır
$icerik = file_get_contents('hikaye.txt') or die('Hata: Dosya okunamadı');
echo $icerik;
?>

İlginç bir bilgi: Eğer sunucunuzdaki php.ini dosyasında allow_url_fopen ayarı açık (true) ise, file_get_contents() ile sadece kendi bilgisayarınızdaki dosyaları değil, başka bir web sitesindeki HTML kodlarını bile okuyabilirsiniz.

B. Dosyayı Satır Satır Okumak: file()

Eğer okuyacağınız dosya bir liste içeriyorsa (örneğin alt alta yazılmış isimler), file() fonksiyonu hayat kurtarır. Bu fonksiyon dosyayı okur ve her bir satırı bir Dizi (Array) elemanı haline getirir.

<?php
$isimler_dizisi = file('isimler.txt');
foreach ($isimler_dizisi as $isim) {
    echo $isim . "<br>";
}
?>

C. Geleneksel ve Güvenli Yöntem (Parça Parça Okuma)

Eğer çok büyük boyutlu bir dosyayı okuyacaksanız (örneğin 2 GB’lık bir log dosyası), tüm dosyayı tek seferde hafızaya (RAM) almak sunucuyu çökertebilir. Bu durumda dosyayı “açıp”, içinden “parça parça okuyup”, ardından “kapatma” işlemini yapmalıyız. Bunun için fopen() ile dosyayı okuma modunda (‘r’) açarız, fgets() ile satır satır okuruz ve en son fclose() ile dosyayı kapatırız. feof() fonksiyonu ise dosyanın sonuna (End of File) gelinip gelinmediğini kontrol eder.

<?php
$fp = fopen('buyuk_dosya.txt', 'r');

// Dosyanın sonuna gelmediğimiz sürece okumaya devam et
while (!feof($fp)) {
    $satir = fgets($fp, 512); // Her seferinde 512 byte oku
    echo $satir . "<br>";
}

fclose($fp);
?>

3. PHP ile Dosya Yazma İşlemleri

Tıpkı okumada olduğu gibi, yazmada da en kısa yöntem file_put_contents() fonksiyonudur. Bu fonksiyon belirtilen dosyaya veriyi yazar. Eğer dosya yoksa, PHP o dosyayı otomatik olarak oluşturur.

<?php
$veri = "Bu metin dosyaya yazılacak.\n";
file_put_contents('yeni_dosya.txt', $veri);
?>

Önemli Bir Detay: file_put_contents() varsayılan olarak dosyanın içindeki eski verileri siler ve üzerine yazar. Eğer eski verilerin silinmesini istemiyor, yeni verinin dosyanın en sonuna eklenmesini istiyorsanız, üçüncü bir parametre olarak FILE_APPEND bayrağını kullanmalısınız.

<?php
$yeni_log = "Kullanıcı sisteme giriş yaptı.\n";
file_put_contents('hareketler.log', $yeni_log, FILE_APPEND);
?>

Çok ziyaretçisi olan sitelerde aynı anda birden fazla kişinin dosyaya yazmaya çalışıp verileri bozmasını (corruption) engellemek için daha profesyonel bir yöntem olan fopen(), flock() (dosyayı kilitleme), fwrite() ve fclose() dörtlüsü de kullanılabilir,.

4. Dosya Bilgilerini ve Niteliklerini Öğrenmek

Bazen bir dosyanın içeriğinden çok, o dosyanın özellikleriyle ilgileniriz. PHP bize şu kullanışlı fonksiyonları sunar:

  • filesize(): Dosyanın boyutunu byte cinsinden verir,.
  • pathinfo(): Dosyanın adını, uzantısını (.txt, .jpg vb.) ve bulunduğu klasör yolunu bir dizi olarak verir,.
  • is_readable() / is_writable() / is_executable(): Dosyanın sırasıyla okunabilir, yazılabilir veya çalıştırılabilir olup olmadığını kontrol eder,,.
  • is_file() / is_dir(): İncelediğiniz hedefin bir dosya mı (is_file) yoksa bir klasör mü (is_dir) olduğunu söyler,.

5. Dosyaları Kopyalama, Taşıma ve Silme

PHP kullanarak sunucunuzdaki dosyaları dilediğiniz gibi organize edebilirsiniz.

  • Kopyalamak için copy(): Eski dosya yolunu ve kopyalanacak yeni yolu belirtmeniz yeterlidir,.
  • Yeniden adlandırmak veya Taşımak için rename(): Eski dosya adını/yolunu, yeni dosya adı/yolu ile değiştirir,.
  • Silmek için unlink(): İstenilen dosyayı sunucudan tamamen ve kalıcı olarak siler,.

6. Dizin (Klasör) İşlemleri

Sadece dosyalarla değil, klasörlerle de işlem yapabilirsiniz.

  • Yeni bir klasör oluşturmak için mkdir() komutunu kullanırız,.
  • Bir klasörü silmek için rmdir() komutunu kullanırız, ancak unutmayın; bir klasörün rmdir() ile silinebilmesi için içinin tamamen boş olması gerekir,.

Bir klasörün içindeki tüm dosyaları listelemek isterseniz opendir() (klasörü açar), readdir() (klasör içindeki ögeleri tek tek okur) ve closedir() (klasörü kapatır) komutlarını bir while döngüsü ile kullanabilirsiniz,.

7. Harici PHP Dosyalarını Dahil Etme: include ve require

Gelişmiş web projelerinde, sitenizin üst menüsünü (header) veya alt kısmını (footer) her sayfa için tekrar tekrar yazmak istemezsiniz. Bu ortak kodları header.php ve footer.php gibi dosyalara kaydedip, ana sayfanıza çağırabilirsiniz.

Bunun için include('dosya.php'); veya require('dosya.php'); kullanılır,.

Yeni başlayanların sıkça sorduğu soru: İkisi arasındaki fark nedir? Cevap çok basittir: Eğer dâhil edilmek istenen dosya bulunamazsa veya silinmişse, include() sadece bir Uyarı (Warning) verir ve sayfanın geri kalan kodlarını çalıştırmaya devam eder. Ancak require() kodu, adı üstünde o dosyanın varlığını zorunlu (require) kılar. Eğer dosya bulunamazsa Ölümcül Hata (Fatal Error) fırlatır ve sayfanın yüklenmesini anında durdurur.

Sonuç

PHP’nin dosya ve dizin fonksiyonları, web sitenizi basit bir sayfadan çok daha güçlü ve işlevsel bir yazılıma dönüştürür. file_exists ile güvenlik kontrollerini yapmayı, file_put_contents ile yeni dosyalar üretmeyi ve unlink ile gereksiz dosyaları temizlemeyi projelerinizde sıklıkla kullanacaksınız. Bir sonraki aşamada bu bilgilerle örneğin kullanıcıların siteye yüklediği fotoğrafları kaydeden ve listeleyen bir resim galerisi inşa edebilirsiniz. İyi kodlamalar!

Etiketlendi:

Cevap bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir