Giris :
Butun bilgisayar programcilari yeri geldiginde dosyalarla
ugrasmak zorunda kalir.Bu bazen gecici verileri dosyalarda
saklama isteginden , uygulamanin setup bilgilerini saklamaya
kadar genis bir yelpazede yer alir.
"Dosya" aslinda hardisk,floopy,cdrom gibi medyalarda saklanan
sirali bytelardan baska bir sey degildir."Dizin" ise ozel
bir dosya tipidir ve icinde diger dosyalarin ve dizinlerin
isimleri saklanabilir.
Linux ve Windows
Unix tabanli isletim sistemleri(Linux gibi) dosyalara ulasmak
icin tanimlanan "yol"larda,"/" isaretini kullanirken windows
isletim sistemleri "\" ters slash tabir edilen isareti kullanmaktadir.
Unix icin dosya yolu ornegi,
/home/serkan/www/turkphp
Windows icin dosya yolu ornegi,
C:\belgelerim\www\turkphp\serkan
Bu olayin yazdigimiz kodlarda problem yaratacagini dusunebiliriz.Ancak
windows uzerinde calisan PHP bu tip durumlarda kodlari otomatik
olarak cevirerek kendi kullanabilcegi hale getirmektedir.Mesela
,
$fp = fopen ("/data/data.txt","r");
seklinde yazilan bir kod windows altinda da sorunsuz caliscaktir.Cok
spesifik olmayan durumlar icin bu kural gecerlidir ve basinizi
pek agritmaz.Yazinin ilerleyen kisimlarinda bir kac aciklama
bu konu icin yapilacaktir.
Dosyalarla Calismak
Tipik olarak dosyalarla calisirken asagidaki adimlar izlenir.
Calismak istediginiz
dosyayi yolu ile belirterek acin.
Dosyayi okuyun
, dosyaya yazin vb...
Dosyayi kapatin.
fopen ()
Ilk gorecegimiz dosya fonksiyonu fopen (),dosyalari acmak
icin kullanilir.Alabileegi 3 tane argument vardir :
dosyaadi
mode
use_include_path
(opsiyonel olarak kullanabilirsiniz)
Dosyalari acmak icin kullanilan bu fonksiyon ayni zamanda
dosyalarin acilip acilamayacagini (yani izinleriniz tamam,dosya
yerinde mi? gibi) kontrol icinde kullanilabilir.
Ornek vermek istersek,
$fp = fopen ("./data.txt","r");
if (!$fp) die ("Dosya Acilamiyor");
veya alternetif olarak tek satirda yazmak istersek,
if (!($fp = fopen ("./data.txt","r"))) die ("Dosya Acilamiyor");
Burada lutfen kafaniz karismasin.$fp degiskenine dosyanin
yolunu veya fopen fonksiyonu kullanmamizin sonucundaki degeri
esitlemiyoruz.Eger boyle yapmak isteseydik "==" kulllanirdik.Dikkat
ederseniz burada bir test islemi gerceklesiyor.Yani aslinda
biz belkide daha sonra kullanacagimiz bir dosyanin yerinde
olup olmadigina bakiyoruz.Onun icin fopen fonksiyonu kullanarak
dosyayi acmak istiyoruz.Donen degere gore if yapisi ile
test islemini gerceklestiriyoruz.
Bu komut kullanilarak yapilan yukaridaki gibi testlerde
uzak host'lardaki dosyalarda kontrol edilebilir.Ornek vermek
istersek,
if (!($fp = fopen("http://www.turk-php.com/dosya.html","r")))
die ("Dosya Acilamiyor);
if (!($fp = fopen("ftp://ftp.turk-php.com/dosya.html","r")))
die ("Dosya Acilamiyor);
uzak host 'taki dosya "yanlizca okunabilir" olarak acilabilir.
Eger daha once Unix tabanli bir isletim sistemi kulllandyisaniz
bundan sonra yazacaklarimiza zaten asinasinizdir.Biz yine
de bilmeyen insanlar icin bir tekrar yapmak istiyoruz.Cogu
zaman gordugunuz ../data.txt veya ./data.txt gibi ifadeler
ne anlama geliyor veya bu noktalar neden koyuluyor gibi?
./data.txt : scriptimiz ile ayni klasorde yer alan data.txt
isimli dosya.
../data.txt : scriptimizin yer aldigi klasorun bir ustundeki
klasorde data.txt isimli dosya.
../../../data.txt : scriptimizin yer aldigi klasorden uc
level yukaridaki klasorde data.txt isimli dosya.
Olayi anladiniz herhalde daha fazla ornek vermeye gerek
duymuyorum.
Simdi de dosyalari acarken kullandigimiz "mode" argumentine
bakalim.
r: Dosyayi yanliz okunabilir olarak ac.Kursor dosyanin basinda
yer alir.
r+: Dosyayi okunabilir ve yazilabilir olarak ac.Kursor dosyanin
basinda yer alir.
w: Dosyayi yanliz yazilabilir olarak ac.Kursor dosyanin
basinda yer alir.Daha onceden var olan hersey yok olur.Eger
boyle bir dosya yoksa PHP yaratmaya calisir.
w+: Dosyayi okunabilir ve yazilabilir olarak ac.Kursor dosyanin
basinda yer alir.Eger boyle bir dosya yoksa PHP yaratmak
icin tessebuste bulunur.Dosya icinde daha onceden var olan
hersey yok olur.
a : Yanlizca dosyanin sonuna veri eklemek icin dosya acilir.Eger
boyle bir dosya yoksa PHP yaratmaya calisir.Eklenen veriler
dosyanin sonuna yazilir.
a+ : Dosyanin sonuna veri eklemek ve dosya okunmak icin
acilir.Eger boyle bir dosya yoksa PHP yaratmaya calisir.Eklenen
veriler dosyanin sonuna yazilir.
Mode argumenti ayni zamanda "b" degerini de almaktadir.Bu
deger verildiginde dosya "binary" modunda islenir.Windows
icin kullanislidir.Linux icin bu degerin bir anlami yoktur.
"include_path" argumenti eger buyuk bir site uzerinde calisiyorsaniz
ve "inc" dosyalari belirli bir klasor uzerindeyse php.ini
dosyasinda "include_path" yolunu belirterek dosya acma islemlerinde
bir kolaylik saglayabilirsiniz.ornek vermek istersek,
php.ini dosyasinda "include_path" olarak /home/apache/inc
verdiyseniz ve,
fopen ("data.txt","r",1);
yadiginiz zaman once data.txt dosyasi scriptin bulundugu
klasorde aranacak eger bulunamaz ise /home/apache/inc klasorune
bakilacaktir.
fclose
Dosya ile calismayi bitirdiginizde ,dosyanin kapatilmasi
gereklidir.Bu islemi fclose () komutu ile yapabilirsiniz.Script
calismayi bitirdiginde otomaik olarak butun acik dosyalar
PHP tarafindan kapatilir.Size tavsiyemiz dosya ile calismayi
bitirdiginiz anda bu komutu kullanarak dosyayi kaptmaniz.anck
bu sekilde ayni scripti kullanan diger kullanicilar hizli
bir sekilde servis alabilir.
fclose ($fp);
seklinde kullanilir.
Dosyalardan okumak ve dosyalara yazmak
Smdiye kadar dosya acma ve kapama islemlerini gorduk.Artik
onlarin icinden verileri okuyabilir ve yazabiliriz.Ilk olarak
cok basit iki komutu gorecegiz.Cogu islemde bu iki komut
isinizi gorecektir.
fread ()
Bu komut dosyadan string karakterleri okumak icin kullanilir.Alabilcegi
iki argument vardir.Ilki dosyanin ne oldugu,ikincisi integer
yani sayisal olarak "length"(uzunluk) degeri.Ornek vermek
gerekirse,
$fp = fopen ("data.txt","r") ile dosyayi basarili sekilde
actigimizi varsayalim.
$data = fread($fp,10);
burada $data degiskeni icine,actigim "data.txt" dosyasindan
ilk 10 byte veriyi okuyup atamis oldum.
Bu konu ile ilgili bilmeniz gereken bir kac onemli nokta
bulunmaktadir.
Ilk 10 byte veriyi
okuduk ve ayni islemi tekrar etmek istedik.Artik kursor ilk
10 byte'in bittigi yerdedir ve biz artik 10-20 bytelari arasindaki
veriyi okuyabiliriz.
Eger dosya 10
byte'tan kucukse PHP dosyanin basindan sonuna kadar okur ve
degeri dondurur,bir problem olmaz.
fwrite ()
Bu komut dosyaya veri yazmak icin kullanilir.Iki argument
bu komutun kullanilmasi icin gereklidir .Birincisi dosyanin
ne oldugu,ikincisi ise dosyanin icine ne yazilacagi. Eger
islem basarili olursa degisken icin ,kac byte veri yazilmissa
onun sayisal degeri doner,basarisiz olursa "-1".Ornek verecek
olursak,
$fp = fopen ("data.txt","w") ile dosyayi basarili sekilde
actigimizi varsayalim.
fwrite ($fp,"ABCDSerKanCeyLAnI");
Bu komut "data.txt" dosyasinin basina "ABCDSerKanCeyLAnI"
karekterlerini yazar.Daha onceden dosya icerisinde yazilmis
tum veriler tamamen silinir.Yanlizca elinizde bu karaketerlerin
yazili oldugu bir dosya kalir.Tekrar ediyoruz kursor bu
karekter dizisinin sonuna gidip bekler.Bu komutu kullanirken
aklinizda olsun, bilgisyara normal olarak klavyeden yaziliyor
gibi karekterler yazilir ve kursor yazdiginiz yazi grubunun
sonuna gidip bekler.
Eger ozel bir uzunluk belirtmek isteseydik,bunu ucuncu argument
olarak komuta su sekilde ekleyebilirdik,
fwrite ($fp,"ABCDSerKanCeyLAnI",4);
Bu komutla verdigimiz string ifadenin(ki bu "ABCDSerKanCeyLAnI"
dir.) ilk 4 byte'i (ki bu "ABCD" dir.) $fp degiskeni ile
belirttigimiz dosya icerisine yazilacaktir.Eger belirtilen
uzunluk byte'i yazilacak ifadeden buyukse ifade'nin hepsi
yazilir,bir problem olmaz.
Artik bu kadar konusma yeterli uygulama yapmanin zamani
geldi.
Basit Bir Hit Sayaci
<?php
//hit_sayac1.php
$sayac_dosyasi = "./sayac.dat";
if (!($fp = fopen ($sayac_dosyasi,"r"))) die ("Dosya Acilamiyor");
$sayac = (int) fread($fp,20);
fclose ($fp)
$sayac++;
echo "Ziyaret Sayisi : $sayac";
$fp = fopen ($sayac_dosyasi,"w");
fwrite ($fp,$sayac);
fclose ($fp);
?>
Ne zaman sayfayi refresh yapsaniz sayfanin uzerindeki sayacin
bir arttigini gorursunuz.
Not : Bu kucuk programda "sayac.dat" isimli dosyanin zaten
klasorun icinde oldugu kabul edilmektedir.Eger boyle bir
dosya bulunamaz ise program hata verecektir.Bu nedenle Unix/Linux
kullanicilari "touch" komutunu kullanarak dizin icinde bir
dosya yaratbilirler.
bash 2.0.4>touch sayac.dat
veya bir text dosyasi acip "save as" ile bos olarak kaydedin.Kaydederken
de "sayac.dat" ismini verin isiniz gorulur.
Program nasil calisiyor?
Ilk once "sayac.dat" dosyamiz scriptin bulundugu klasor
icinde bulundu ve "yanlizca okunabilir" olarak acildi.
$sayac_dosyasi = "./sayac.dat";
if (!($fp = fopen ($sayac_dosyasi,"r"))) die ("Dosya Acilamiyor");
ikinci satirda "if" komutuyla dosyanin acilmasi sirasinda
bir problem oldu mu diye test yapiyoruz.Eger islem basarili
olarak gerceklesirse parantezin disina "dogru" olarak cikacaktir.Ama
dikkat ederseniz bir unlem isaretimiz var.Bu unlem isareti
o "dogru" ifadasini "yanlis" a cevirecek ve boylece program
bir alt taki satiri okuyacaktir.Her turlu problemde script
"die" komutuyla , "echo" ile verigimiz ifadeyi ekrana basarak
sonlanacaktir.
Boylece yazi dizimizin ilk bolumunu bitirdik.Bundan sonraki
bolumde ayrintili olarak "Dosya ve dizin Islemleri" konusuna
devam edecegiz.
|