Dosya okuma: fgets(), fread() ve fgetc()
Açtığımız bir dosyanın içindeki yazıları çoğu zaman programımıza satır
satır okuturuz. PHP'de bir dosyanın içeriğini satır satır okutmamızı fgets()
fonksiyonu sağlar. Bu fonksiyona daha önce açılmış olan dosyanın
işaret değişkenin adını ve okunmasını istediğimiz asgari byte ölçüsünü
parametre olarak veririz. fgets() fonksiyonu verdiğimiz uzunluk
ölçüsüne ulaşmadan önce dosyada bir yeni satır işareti görürse, veya
dosyanın sonuna ulaşırsa, okumaya son verir. Bu fonksiyonu çoğu zaman
bir döngünün içinde kullanırız. Ancak döngünün hata vermemesi için,
PHP'nin dosyanın sonuna ulaştığında döngüyü durdurmamız gerekir. fgets()
fonksiyonunun okuyacağı satırı bir fonksiyona değer olarak verebilir
ve daha sonra bu değeri programlarımızda kullanabiliriz. Örnek:
<?php
$dosya_dizin = "/inetpub/wwwroot/";
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {
print ("Dosya açıldı!<br>");
}
else {
print ("Dosya açılamadı!");
}
while ( ! feof ($dosya ) ) {
$satir = fgets ( $dosya, 1024 ) ;
print ("$satir<br>");
}
fclose ($dosya);
?>
Bu program kişisel Web sunucuda önce varolan bir dosyayı açıyor; ve bu
dosyanın işaretçisi olarak $dosya değişkenini kullanıyor. Daha sonra
bir while() döngüsü içinde bu değişkeni ve 1 KB (1024 byte) ölçüsünü parametre olarak vererek fgets() fonksiyonu ile dosyadan bir satır okutuyoruz. fgets() fonksiyonundan dönen bir satırlık metni, burada $satir değişkenine atıyoruz; ve daha sonra print()
fonksiyonu ile bu satırı Browser penceresine gönderiyoruz. Bu işlemi
Internet'teki bir Web sunucuda uygulayabilmek için yazma/okuma izni
bulunan ve Web sunucunun erişebileceği bir dizinin adını vermeniz
gerekir. Bu işlemin içinde yapıldığı while() döngüsünün devam şartı olarak kullandığımız ifadede yer alan feof() fonksiyonu bir dosyanın dosya-sonu (end-of-file) durumuna ulaşıp ulaşmadığını sınar. PHP, her dosyanın sonunda yer alan eof (Ctrl-z, ^z) işaretine eriştiği anda feof() fonksiyonu doğru/true değerini verir. while() döngüsü, feof()
doğru değilken devam etmek üzere kurulmuş olduğu için, dosya sonuna
ulaştığımızda döngü duracaktır. Okuma işlemini durabilen bir döngüye
bağlamazsak, fgets() PHP'nin bir programın sona ermesi için verilmiş varsayılan süresi doluncaya kadar dosyayı okumak isteyecektir.
Kimi zaman dosyalarımızın içeriğini satır-satır okutmak yerine, kendi
tayin edeceğimiz uzunlakta parçalar halinde okutmak isteriz. Bunu, fread() fonksiyonu ile sağlarız. Örnek:
<?php
$dosya_dizin = "/inetpub/wwwroot/";
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {
print ("Dosya açıldı!<br>");
}
else {
print ("Dosya açılamadı!");
}
while ( ! feof ($dosya) ) {
$paragraf = fread ( $dosya, 1024 ) ;
print ("$paragraf<br>");
}
fclose ($dosya);
?>
fread() fonksiyonu da daha önce açılmış olan dosyanın işaret
değişkenin adını ve okunmasını istediğimiz asgari byte ölçüsünü
parametre olarak alır. fread() fonksiyonu verdiğimiz uzunluk
ölçüsüne ulaşmadan önce dosyada bir yeni satır işareti görürse, veya
dosyanın sonuna ulaşırsa, okumaya son verir. Bu fonksiyondan
yararlanırken, verdiğiniz uzunluk ölçüsünün, almak istediğiniz metin
parçasına uygun olduğunu sınamalısınız. fread(), bu ölçüye
ulaştığında okumayı keser. Buradaki örneği 1024 byte ölçüsünü
değiştirerek ve mesela 1, 2, 3 yaparak deneyebilir ve böylece
vereceğiniz ölçünün okunan metnin uzunluğunu nasıl tayin ettiğini
görebilirsiniz.