PHP ile Dosyadan Okuma

DOSYA’DAN OKUMA
PHP txt metin dosyasından okuma ve yazmayı, dosya yaratmayı, dosya silmeyi destekler.Metin dosyaları ile ilişkiler bize nerelerde yarar diye kendi kendimize sorduğumuzda en etkileyici cevabın şu olduğunu anlıyoruz.Bazı serverlar PHP desteği sağlarken MYSQL gibi SQL programlarını desteklemiyor.O durumda verilerimize depo edebileceğimiz tek kaynak metin dosyaları oluyor.Ama metin dosyaları ile çalışmak pekde güvenli olduğu söylenemez.Çünkü ziaretçi adres hanesine rasgelede olsa metin dosyasının adresine yazarsa veritabanına ulaşmış olur ki bunuda hiçbir webmaster istemez.Neyse biz veri okuma işiyle işimize devam edelim.
İlk önce bir PHP dosyasına başka bir sayfayı nasıl monte edebileceğimizi görerek işimize başlayalım.Bu yöntemi kullanmanızı şiddetle tavsiye ederim.


include "harici_dosya.inc";

Bu include komutu harici_dosya.inc dosyasını aynen alıp bu komutun işlendiği dosyaya yapıştırır.Burada dikkat etmemiz gereken bir husus; include komutunu kullanırken bu harici dosyaların uzantılarını farklı yapmalısınız.Çünkü ziyaretçiler bu dosyalara direkt ulaşmalarını istemeyiz.Veya bu dosyaların uzantılarını hep inc yapın ve bu inc dosyalarının bulunduğu dizine şu dosyayı ekleyin.


<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>

Bu dosyayı .htaccess olarak kaydedip bu dosyaların bulunduğu dizine ekleyin.Eğer uzantıları farklı yapmak istiyorsanız yukarıdaki kodun ilk satırında bulunan inc yazısını istediğiniz gibi değiştirebilirsiniz.

Dosya hakkında bilgi edinme:

Önce dosyanın olup olmadığını öğrenmek istiyorsak file_exists komutundan yararlanırız.Bu kotuda iki yöntemle işleyebiliriz.Bunlar:


if ( file_exists ( "dosya.txt" ) ){
print "dosya var";
}
else{
print "Dosya yok";
}
@file_exists ("dosya.txt") or die ("Dosya yok");

Bu iki yöntemde kullanılabilir.ama basitliği nedeniyle 2. yöntem kullanmak daha iyidir.Bu yöntemi biraz açarsak; ilk önce komutun başına @ işareti niçin koyduk?Bu @ işareti komutun hata vermesi durumunda browserda hata numarası çıkartmamaktadır.Bu işareti %100 hata yapmadığınıza inandığınız her yerde kullanabilirsiniz.Sonra file_exists komutu ile dosyanın olup olmadığına bakıyoruz.Eğer dosya yok ise or die den sonraki paragraf içindeki alan devreye giriyor.Eğer dosya varsa PHP direkt alt satırı okumaya başlar.Aksi takdirde alt satıra geçmez.
Aşağıda vereceğim komutlarda üstteki gibi kullanılır.Onun için sadece komutların ne işe yaradıklarını verip geçeceğim.


is_file ("dosya.txt") //dosya.txt dosyamıdır?
is_dir ("dosya") //dosya dizinmidir?
is_readable ("dosya.txt") //dosya okunabilirmi?
is_writable ("dosya.txt") //dosya.txt yazılabilirmi?
is_executable ("dosya.txt") //Dosya çalıştırılabilirmi?
print filesize("dosya.txt"); //Dosyanın boyutunu verir

Bu komutlardan sonra sıra geldi dosya yartmaya.Bunun için kullanacağımız komut touch komutudur.Yalnız birşey peşinen söyleyeyim “dosya yaratma veya silem” güvenlik açısından çoğu server desteklemez.Yani bu komutların çalışıp çalışmayacağını server yöneticilerine sormanız gerekir.Ama biz bu dosyaları kendi bilgisayarımızda çalıştırdığımız için şimdilik bir sorun yok.

$dizin="/Apache/htdocs/";
if (touch("$dizin/dosya.txt") ){
print "dosya.txt adında bir dosya yaratıldı";
}
else{
print "dosya yaratılamadı";
}

Burada dizin değişkeninde kendi bilgisayarımın dizinini yazdım.Bu dizin değişkenine siz kendi dizininizi koymanız gerekir.Dizini bulmanın en kestirme yonu bir php programına şu komutu vermenizdir. print $HTTP_ENV_VARS[“DOCUMENT_ROOT”]; Bu size dizininizi vercektir.Ama Windows işletim sistemi kullanıyorsanız bu şöyle çıkacaktır: C:\Apache\htdocs bonu siz /Apache/htdocs/ şekline çevirmeniz gerekir.Dosya silme işlemide şöyle olur:


$dizin="/Apache/htdocs/";
if (unlink("$dizin/dosya.txt") ){
print "dosya.txt adında ki dosya silindi";
}
else{
print "dosya yaratılamadı";
}

Gerçi dizini girmesekde programlarımız çalışıyor ama bu yöntem daha sağlıklıdır.Onun için bu yöntemi kullanmanızda fayda vardır.
Şimdi sıra geldi dosya okumaya.Önce dosya.txt diye bir dosyanın içerisine birkaçsatır yazı yazarak kaydedin.Dosyalarımızı okutabilmek için önce o dosyayı açmamız gerekir ve vu işi bize fopen komutu gerçekleştirir.Dosyamızı okuyacağımızı belirten komut aslında bir harfdir r dir.Şimdi buraya kadar öğrendiklerimizi tatbik edelim.

fopen(“dosya.txt”,’r’) or die (“Dosya açılamadı”);

Burada dosyamızı açacağımızı ve okuyacağımızı belirtiyoruz.Eğer dosya bulunamazsa hata mesaj vermesini istiyoruz.Şimdi de dosyamızın içerisinde bulunan verileri bowsera nasıl döküleceğini görelim.


$dosya="dosya.txt";
$bak=@fopen($dosya,"r");
while(!feof($bak)):
$satirlar=fgets($bak,4096);
print $satirlar;
endwhile;
fclose($bak);

Burada ilk olarak dosyamızı dosya değişkenine depoluyoruz.Daha sonra da bak değişkenine dosyamızı açacağımıza dair kodu giriyoruz.Daha sonra bir while döngüsü ile dosyamızda bulunan bütün verileri bowsera yazdırıyoruz.Şimdi birkaç komutu burada açıklamakta yarar var.

fgets() dosyaların içeriğini satır satır okutmaya yarar.Bu komut ile birlikte okunmasını istediğimiz baytı da yazmamız gerekmektedir.
fread() dosyaların içeriğini istediğimiz uzunlukta parçalar halinde okumammıza yarar.Bunun için askari byte ını da yazmanız gerekmektedir.


$dosya="dosya.txt";
$bak=@fopen($dosya,"r");
while(!feof($bak)):
$satirlar=fread($bak,1024);
print $satirlar;
endwhile;
fclose($bak);

PHP’de CSV yani virgülle ayrılmış dosyaları okumakta bize kolaylık sağlamıştır.Bu CSV dosyalarını Excel veya Access ile yapmanız mümkündür.Sözgelimi excel ile bir veri kümesi yarattınız.Her satıra ve her sutuna bir değer yazdınız ve bunu CSV formatında kaydettiğinizde şöyle bir görünüm ortaya çıkar.

ad;soyad;mail;adres
mehmet;kaya;mehmetkaya1980@gmail.com;Kahramanmaraş

PHP bu gibi dosyaları noktalı virgüle kadar olan kelimeleri veya kelime gruplarını sınırlı olarak okuma şansı vermektedir.Örnekler kısmında bulunan kullanıcı kayıt sistemini bu mantıkla yaptık.Ama bu örnek biraz daha değişik.yukarda yazılanları dosya.txt olarak kaydedin.Sonra da aşağıdaki kodu da dosya.php olarak kaydedin.


<?php
$dosya="dosya.txt";
$bak=@fopen($dosya,"r");
while(!feof($bak)):
$satirlar=fgetcsv($bak,4096,";");
print "$satirlar[0] $satirlar[1] $satirlar[2]<br>";
endwhile;
fclose($bak);
?>

Burada görüldüğü gibi sadece satirlar değişkenini oluştururken fgetcsv komutunu kullandık ve ayrıca tırnak içerisine dosyamızda kullandığımız ayracı yani noktalı virgülü gösterdik.Sonrada satirlar değişkeinin bir dizi değişkeni olarak niteledik ve dosyada bulunan kelimeleri sırasıyla dizi değişkene sıfırdan başlayarak yazdırdık. Burada bir hususu belirteyim: Döngüden sonra mutlaka dosyaya kurduğumuz bağlantıyı kesmeliyiz.Bunun için fclose() komutunu kullanıyoruz.

Be the first to comment

Leave a Reply

Your email address will not be published.


*