logo
Welcome Guest! To enable all features please Giriş or Kayıt.

Bildirim

Icon
Error

Ayarlar
Son mesaja git Go to first unread
kodcu  
#1 Gönderildi : 13 Aralık 2016 Salı 15:00:40(UTC)
kodcu

Sıralama: Advanced Member

Gruplar: Registered
Katılan: 12.12.2016(UTC)
Mesajlar: 37
Turkey

Php Dosya İşlemleri

Web programıcısı olarak ziyaretçinin bize göndereceği bilgileri yakalamayı öğrendik.
Şimdilik sadece ziyaretçinin Browser'ına geri gönderdiğimiz bu bilgileri, sunucu tarafından
çeşitli işlemlerde kullanabiliriz. Bu işlemlerin başında dosya girdi/çıktı işlemleri gelir. Başka
bir ifade ile ziyaretçiden aldığımız bu bilgileri sunucuda bir dosyaya yazdırabiliriz. Bu
bölümde PHP ile sunucuda yapabileceğimiz dosya işlemlerine bakacağız. Tabiî dosya
işlemleri dendiğinde sadece ziyaretçiden aldığımız bilgileri bir dosyaya yazdırmakla
yetinmeyeceğiz; PHP programlarımıza sunucuda bir dosyada bulunan bilgileri okumasını da
öğreteceğiz.
Harici Dosya (include)
PHP programlarımızda bilmemiz gereken ilk dosya işlemi, bir PHP programına,
kendi dışındaki dosyayı, tabir yerinde ise, okutmak ve içindekileri aynen alıp,
görüntülemesini sağlamaktır. Bunu include komutu ile yaparız. Bu komut, kendisine adı
verilen düzyazı dosyasının içeriğini aynen bu komutun bulunduğu noktaya "yazar." Bu yolla
bir PHP programına sık kullandığınız bir metni veya program parçasını dahil edebilirsiniz.
Bir güvenlik önlemi olarak bu tür dosyaların uzantılarını, sunucu ve Browser'ların tanıdğı
MIME türlerine ait uzantılardan farklı yaparsanız, ziyaretçiler şans eseri de olsa bu
dosyaları doğruca edinme imkanı bulamazlar. Bir örnek yapalım. Önce şu metni,
harici_dosya01.x adıyla ve düzyazı biçiminde kaydedin (Windows ortamında Notepad'i
kullanıyorsanız, dosya adı uzatması olarak .x harfinden sonra .txt harflerini eklediğine
dikkat edin!):

"Ben harici bir dosyanın içindeki yazıyım.. Beni bir PHP programı alıp buraya getirdi! Kendisine teşekkür ederim"

Sonra, şu programı dosya_ekle01.php adıyla kaydedin, ve Browser'da açın:

Kod:

<HTML> 
<HEAD> <TITLE>PHP'de Harici Dosya Ekleme</TITLE> 
<meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-9\"> 
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1254\"> 
</HEAD> 
<?php 
   include ("harici_dosya01.x"); 
   print ("\n<p> Ben zaten bu programının içinde olan bir yazıyım. Baştan beri burada olduğuma çok memnununum.. Harici dosyaya hoşgeldin     diyorum!</p>"); ?> 
</BODY> 
</HTML> 



Buradaki include komutu biraz önce yazdığımız harici dosyayı alacak, içeriğini
aynen kendi bulunduğu noktada, PHP'nin oluşturacağı HTML dosyasına katacaktır. Bu
programı çalıştırdığınızda görüntü şöyle olacaktır:
Bu görüntüyü aldığınız sırada Browser'ınızda kaynağı görüntülerseniz, iki metnin
adeta birleştirilmiş olduğunu göreceksiniz. Fakat dışardan PHP programına sadece düz
metin eklemeyiz; program veya fonksiyon da ekleyebiliriz. Harici dosyada şu değişikliği
yaparak, harici_dosya02.x adıyla kaydedin.

Kod:

<?php print ("Ben de harici dosyayım.!<br>"); print ("Ama ben hesap da yaparım.. Örneğin iki iki daha ". (2 + 2). " eder!"); ?>



Haricî dosya okuyan programı da programı içinde, okunacak dosya adını
düzelttikten sonra dosya_ekle02.php adıyla kaydedin; ve çalıştırın.
Haricî dosyamızda yer alan ...iki iki daha ". (2 + 2). " eder!"); şeklindeki ifadenin
programa gelirken "..iki iki daha 4 eder!" şekline gelmesinin izahı, PHP'nin dışarıdan aldığı

dosyanın içinde PHP programı olduğunu gördüğü anda, bu dosyanın içeriğini metin olarak
değil, program olarak ele almasıdır. Bu yolla, PHP programlarımıza bir değerin dönmesini
de sağlayabiliriz. Haricî dosyamızda şu değişikliği yapalım ve harici_dosya03.x adıyla
kaydedelim:

Kod:
 <?php $sonuc = ( 2 + 2 ); return $sonuc; ?> 
Bu satır bakalım programa dahil olacak mı? 


Sonra, program metninde şu değişlikliği yaparak, dosya_ekle03.php adıyla
kaydedin ve çalıştırın:

Kod:

<?php $donen_sonuc = include("harici_dosya03.x"); print ("\n<p> Harici dosyadan dönen sonuç: $donen_sonuc </p>"); ?>  


Haricî dosyamızın içindeki program, return komutu ile sadece kendi içinde elde
ettiği sonucu, onu çağıran programa verdi; ve bu sonucu alan programımız, sadece kendi
içindeki bir değişkenin değerini Browser'a gönderdiği halde, bu değer haricî dosyadan
alınmış oldu.
Haricî dosyaların include yoluyla PHP programlarımıza katılması, özellikle bir sitenin
bir çok programında sık sık kullanılan metinlerin ve hesaplamaların bir kere yazılmasını ve
tek satırla çağrılmasını sağladığı için kolaylık sağlar ve hata ihtimalini azaltır.
include mu, require mı?
PHP4.0 ile, include komutu gibi işleyen ancak ondan farklı olarak kendisini çağıran
programa değer veremeyen require komutu da kullanılabilir hale geldi. İçinde bir
hesaplama bulunmayan veya kendisini çağıran dosyaya bir return komutu ile bir değer
dönmesini sağlaması beklenmeyen dosyaları require komutu ile de ana programımıza dahil
edebiliriz.
include ile alacağımız dosyaların adını PHP programının oluşturmasını sağlayarak
kimi zaman pogramlarımıza dinamizm sağlamamız mümkündür. Sözgelimi bir menü
maddesinin tıklanmasıyla harekete geçen bir Javascript fonksiyonunun, ziyaretçinin
gideceği sayfaya göndereceği değeri include komutuna dosya adı oluşturmakta
kullanabiliriz. Bazen include komutuna dosya adı oluşturmakta program içindeki
döngülerden yararlanınız. Örnek:

Kod:

for ( $i = 1 ; $i <= 3 ; ++$i) {  
include ("dosya0" . $i . ".x");  
}


Haricî dosyalarımızın adlarının dosya01.x, dosya02.x ve dosya03.x olmalı halinde,
bu döngü sırasıyla her üç dosyayı da çağıracak ve altalta ana programa dahil edecektir.
Dosyalar hakkında bilgi
PHP'de yukarıda ele aldığımız include ve require komutları ve biraz sonra
değineceğimiz dosya okutma ve yazdırma işlemleri dolayısıyla bir dosyanın varlığı veya
yokluğu, ya da bir dosyaya ait sandığımız ismin bid klasöre ait olması, programımızın
sağlıklı işleyebilmesi açısından büyük önem taşır. PHP bu amaçla bize bir kaç kullanıma
hazır fonksiyon sağlıyor. Burada kısaca bu fonksiyonlara ve nasıl kullanıldıklarına
değinelim:
Dosya var mı? file_exits()
Bir dosyanın var olup olmadığını denetleyen bu fonksiyon, dosya varsa true/doğru,
yoksa false/yanlış sonucunu verir. Örnek:

if ( file_exits ( "bir_dosya.txt" ) ) print ("Dosya var!");

Dosya yoksa, program "Dosya var!" yazmadan yoluna devam edecektir.

Dosya mı, dizin mi? is_file() ve is_dir()
Kimi zaman klasörler de tıpkı dosyalar gibi adlandırılabilir. Bir dizinde gördüğümüz
ismin gerçekten bir dosyaya ait olup olmadığını bu fonksiyonla sınarız. Sınama doğru, yani
isim bir dosyaya ait ise fonksiyon true/doğru, değilse false/yanlış sonuç verir. Örnek:

if ( is_file ( "bir_dosya.txt" ) )
print ("Bu bir dosyadır!");

İsim bir dosyaya ait değilse program "Bu bir dosyadır!" yazmadan yoluna devam
edecektir. Sınamayı ismin bir klasöre ait ait olup olmadığına bakrarak da yaparız. Bu
durumda is_dir() fonksiyonunu kullanırız. isim bir dizine aitse fonksiyon true/doğru,
değilse false/yanlış sonuç verir. Örnek:

if ( is_dir ( "/bir_isim" ) )
print ("Bu bir dizindir!");

İsim bir dizine ait değilse program "Bu bir dizindir!" yazmadan yoluna devam
edecektir.
Dosya okunabilir mi? is_readable()
Programda kullanmaya karar vermeden önce bir dosyanın erişilebilir ve PHP
tarafından okunabilir olup olmadığını sınayan bu fonksiyon, dosya okunabilir ise
true/doğru, değilse false/yanlış sonuç verir. Örnek:

if ( is_readable ( "bir_dosya.txt" ) )
print ("Bu dosya okunabilir!");

Dosya okunabilir değilse program "Bu dosya okunabilir!" yazmadan yoluna devam
edecektir. (Unix ortamında varlığını görebildiğimiz her dosyanın okuma izni
bulunmayabilir.)
Dosya yazılabilir mi? is_writable()
Programda kullanmaya karar vermeden önce bir dosyanın yazılabilir olup olmadığını
sınayan bu fonksiyon, dosya yazılabilir ise true/doğru, değilse false/yanlış sonuç verir.
Örnek:

if ( is_writable ( "bir_dosya.txt" ) )
print ("Bu dosyaya yazılabilir!")

Dosya yazılabilir değilse program "Bu dosyaya yazılabilir!" yazmadan yoluna devam
edecektir. (Unix ortamında varlığını görebildiğimiz hatta okuyabildiğimiz her dosyanın
yazma izni bulunmayabilir.)
Dosya çalıştırılabilir mi? is_executable()
PHP programında kimi zaman sunucunun kullanmamıza izin verdiği haricî
programları çalıştırız; PHP programımızın düzgün işlemesi bu harici programa bağlı olabilir.
Böyle bir programı çalıştırmaya karar vermeden önce bir dosyanın çalıştırılabilir olup
olmadığını sınayan bu fonksiyon, dosya çalıştırılabilir ise true/doğru, değilse false/yanlış
sonuç verir. Örnek:


if ( is_executable ( "bir_dosya" ) ) print ("Bu dosya çalıştırılabilir!");

Dosya çalıştırılabilir bir program değilse PHP programı "Bu dosya çalıştırılabilir!"
yazmadan yoluna devam edecektir. (Unix ortamında varlığını görebildiğimiz her pprogram
dosyasının çalıştırma izni bulunmayabilir.)
Dosya boyutu: filesize()
Adını verdiğimiz dosyanın boyutunu byte olarak bildirir: Örnek:

print ("Dosyanın boyutu:");
print filesize( "bir_dosya.txt" );


Dosyaya son erişim tarihi: fileadate(), filemtime() ve filectime()
Adını verdiğimiz dosyaya son erişim tarihini bildirir. ne var ki bu bilgi Unix'in
"epoch" biçimindedir: Örnek:

print ("Dosyanın son erişim tarihi:");
$dosya_tarihi = fileadate( "bir_dosya.txt" );
print ( " $dosya_tarihi " );

Eğer bu dosyanın son erişim tarihi 28 Temmuz 2000, Cuma 24:00:00 ise, PHP,
Browser penceresine 964731600 yazacaktır. Bu komutun ürettiği bilgiyi, date() fonksiyonu
ile anlaşılabilir hale getirebiliriz:

print ("Dosyanın son erişim tarihi:");
$dosya_tarihi = fileadate( "bir_dosya.txt" );
print date("D d M Y G:i:s H", $dosya_tarihi );

Bu kez PHP Browser penceresine 28 Jul 2000 242:00:00 00 yazdıracaktır. Tarih
verilerinin date() fonksiyonu ile biçimlendirilmesini daha sonra ayrıntılı ele alacağız.
filemtime(), bir dosyanın son değiştirildiği tarihi; filectime(), ise oluşturulduğu
tarihi, yine Unix Epoch biçiminde bildirir; bu verinin anlaşılır biçimde görüntülenmesi için
PHP'nin date() fonksiyonu kullanılır.
Dosyalar oluşturma ve silme
PHP ile yapabileceğimiz önemli dosya işlemlerinin başında olmayan bir dosyayı
oluşturmak ve olan bir dosyayı silmek gelir. PHP'nin dosya oluşturma komutu touch()
fonksiyonudur. Bu fonksiyona oluşturulmasıın istediğimiz dosyanın adını vermemiz gerekir.
Örnek:

Kod:

<?php $dosya_dizin = "/inetpub/wwwroot/";  
 touch ("$dosya_dizin/yeni_belge.txt"); 
print ("yeni_belge adlı bir dosya oluşturuldu!"); ?> 
</BODY> </HTML> 



Bu programı kişisel Web sunucuda denerken yeni dosyanın oluşturulacağı dizin
olarak "/" işaretiyle sadece kökdizini belirtirseniz, dosya C: diskinde kökdizinde oluşturulur.
Bu programı gerçek sunucuda çalıştırabilmek için yazma/okuma izni bulunan ve Web
sunucunun erişebileceği bir dizinin adını vermeniz gerekir. Örneğin:

Kod:

<?php $dosya_dizin = "/wwwroot/mycgiserver.com/members/uNhM13Qnm/"; 
touch ("$dosya_dizin/yeni_belge.txt"); 
print ("yeni_belge adlı bir dosya oluşturuldu!"); 
?> 




Bu komutla oluşturacağınız dosya içi boş bir metin dosyası olacaktır. Eğer
belirttiğiniz dizinde bu adı taşıyan bir dosya varsa, PHP dosyanın içeriğine dokunmayacak,
fakat dosyanın erişim ve değişim tarihlerini değiştirecektir.
PHP ile mevcut bir dosyayı silmek için unlink() fonksiyonunu kullanırız. Bu
fonksiyon da silinecek dosyanın adı ile birlikte yolunu ister. Örnek:

Kod:

<?php $dosya_dizin = "/wwwroot/mycgiserver.com/members/uNhM13Qnm/"; 
unlink ("$dosya_dizin/yeni_belge.txt"); 
print ("yeni_belge adlı dosya silindi!"); ?> 



Bu komut Windows sistemlerinde işlemeyebilir.
Dosya açma
PHP'de bir dosyanın içeriğini alarak sayfalarımızda kullanma veya bir dosyanın
içeriğini değiştirmek gibi işlemler için önce dosyanın açılmış olması gerekir. Bunu
gerçekleştiren fopen() fonksiyonudur. Bu fonksiyonla bir dosyayı okumak ('r'), yazdırmak
('w') veya ek yapmak ('a') için açabiliriz. Bu fonksiyon dosyanın başarıyla açılması halinde
bir tamsayı verecektir. PHP programlarımızda, açılan dosyanın mutlata ona işaret eden bir
değişkene (file pointer) bağlı olması gerekir; daha sonra bu dosya ile ilgili bütün işlemleri
bu işaret değişkeni ile yaparız.
Örnek: $dosya = fopen( "bir_dosya.txt" , 'r' ); PHP, bu dosyayı sadece okumak amacıyla açacak ve fonksiyondan dönen değeri
$dosya değişkenine atayacaktır. Olmayan bir dosyayı açmak istediğimiz zaman PHP hata
mesajı verir. Bir dosyayı yazmak amacıyla açacağımız zaman, bu kodu şöyle yazarız:
$dosya = fopen( "bir_dosya.txt" , 'w' ); Olmayan bir dosyayı yazmak amacıyla açmak istediğimizde PHP önce bu dosyayı
oluşturur. Bir dosyaya ek yapmak istediğimiz zaman ise kodumuz şu şekilde yazılır:
$dosya = fopen( "bir_dosya.txt" , 'a' ); Olmayan bir dosyayı ek yapmak amacıyla açmak istediğimizde PHP hata mesajı
verir.

Bir Fonksiyonu durdurmak için: Öl!
Bir PHP fonksiyonunun kendisinden beklenen işi yapamaması halinde oracıkta
durdurulmasını die() komutu sağlar. "Öl!" anlamına gelen bu fonksiyona ekranda
görüntülenmesini istediğimiz bir metni parametre olarak verebiliriz. Bu bölümdeki örnekler
bu komutla birlikte şöyle yazılabilir:

$dosya = fopen( "bir_dosya.txt" , 'a' ) or die ("Dosya açılamıyor!") ;

Bu komutu kişisel Web sunucusunda denerken, dosyanın açılacağı dizinin yolunu
belirtmemiz gerekir. Örneğin:

Kod:

<?php $dosya_dizin = "/inetpub/wwwroot/"; 
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {  
print ("Dosya açıldı!");  }  
else {  print ("Dosya açılamadı!");  } 
?>


PHP, bu dosyayı açtığında Browser penceresinde dosyanın açıldığını belirten mesajı
görüntülecektir. 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. Örneğin:

Kod:

<?php $dosya_dizin = "/wwwroot/mycgiserver.com/members/uNhM13Qnm/"; 
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {  
print ("Dosya açıldı!");  }  
else {  print ("Dosya açılamadı!");  } ?> 




Açtığımız bir dosya ile yaptığımız bütün işlemler bittikten sonra, dosyanın
kapatılması gerekir. Dosya kapatma işlemini fclose() fonksiyonu yapar. Bu fonksiyona
parametre olarak dosya adını değil, dosyanın işaretçisi olan değişkenin adını veririz.
Örnek: fclose ( $dosya );

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

Kod:

<?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:

Kod:

<?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.

fseek() ile ölçü belirleme
PHP'nin dosya işleminde kullabileceğiniz bir diğer fonksiyonu fseek() adını taşır.
Daha önce açılmış olan dosyanın işaret değişkenin adını ve ve programın bu metin içinde
zıplamasını istediğiniz noktanın dosyanın başından itibaren byte değerini parametre olarak
alan bu fonksiyon ile, bir dosyanın içinnde istediğimiz yere gitme imkanı vardır. Örnek:

Kod:

<?php $dosya_adi = "/inetpub/wwwroot/bir_dosya.txt"; 
if ($dosya = (fopen ($dosya_adi , 'r') ) ) { 
 print ("Dosya açıldı!<br>");  }  
else {  print ("Dosya açılamadı!");  } 
$dosya_boyut = filesize($dosya_adi); 
$olcu = (int) ($dosya_boyut / 2 ); 
while ( ! feof ($dosya) ) {  $paragraf = fread ( $dosya, $olcu) ;  
print ("$paragraf<br>");  } 
fclose ($dosya);  ?>



Burada, okutulacak dosyanın boyutunun yarısını atadığımız $olcu değişkenini,
okutulacak metnin ölçüsü olarak kullanıyoruz. Bu durumda PHP, dosyayı iki paragraf
halinde görüntüleyecektir.
////
Dosyalarımızın içeriğini satırlar veya belirli ölçüde parçalar halinde değil de, tek-tek
karakter olarak okutmak için fgetc() fonksiyonundan yararlanırız. Bu fonksiyon, daima 1
byte ölçüsünde (bir karakter) metin okuyabileceği için, parametre olarak sadece daha önce
açılmış olan dosyanın işaret değişkenin adını alır. Örnek:

Kod:

<?php $dosya_adi = "/inetpub/wwwroot/bir_dosya.txt"; 
if ($dosya = (fopen ($dosya_adi , 'r') ) ) {  
print ("Dosya açıldı!<br>");  }  
else {  print ("Dosya açılamadı!");  } 
while ( ! feof ($dosya) ) {  $karakter = fgetc ( $dosya ) ;  
print ("$karakter<br>");  } 
fclose ($dosya); 
 ?>



Burada fgetc() fonksiyonundan dönen değeri (yani dosyadan okunan bir karakteri),
$karakter değişkenine atıyoruz ve daha sonra print() fonksiyonu ba karakteri ve HTML'in
satır bölme kodu olan <br> işaretini Browser penceresine gönderiyor. Programı bu şekliyle
sınarsanız, dosyadaki metnin tek karakter olarak Browser penceresinin soluna dizildiğini
göreceksiniz. Programı <br> kodunu silerek çalıştırırsanız, bu kez dosyadaki metinde var
olan satır sonu işaretlerinin de kaldırıldığını ve metnin bir paragraf oülarak
görüntülendiğıini görebilirsiniz.

Dosyaya yazma ve ek yapma: fwrite() ve fputs()
Bir dosyaya yazma veya ek yapma, PHP açısından aynı işlemdir; sadece dosyaların
açılışında fark vardır. Hatırlayacaksınız, bir dosyayı yazmak amacıyla açmak için:

$dosya = fopen( "bir_dosya.txt" , 'w' ) or die ("Dosya açılamıyor!") ;

ek amacıyla açmak için ise

$dosya = fopen( "bir_dosya.txt" , 'a' ) or die ("Dosya açılamıyor!") ;

kodunu yazmamız gerekir. Dana sonra yapılacak yazma ve ekleme işlemlerinin farkı, 'w'
parametresi ile açılan dosyaya yazma işlemi en başından başlar ve devam eder; 'a'
parametresi ile açaılan dosyaya yazma işlemi ise en sondan başlar ve devam eder.
PHP'nin bir dosyaya metin yazdırma fonksiyonları olan fwrite() ve fputs() aynı
biçimde yazılır ve aynı işlevi yerine getirirler; aralarında kesinlikle fark yoktur. Örnek:

Kod:

<?php $dosya_adi = "/inetpub/wwwroot/bir_dosya.txt"; 
$dosya = fopen ($dosya_adi , 'w') or die ("Dosya açılamadı!"); 
$metin = "Bu satır dosyaya yazılacak: Merhaba Dünya!\n";  
fwrite ( $dosya , $metin ) ; fputs ( $dosya , "Bu satır ise sonradan eklenecek\n" ) ; 
fclose ($dosya);  ?> 


Bu programı çalıştırdığınızda, bir_dosya.txt adlı dosyada mevcut bütün içerik
silenecek ve yerini $metin değişkeninin içerdiği "Bu satır dosyaya yazılacak: Merhaba
Dünya!" yazısı ile "Bu satır ise sonradan eklenecek" cümlesi alacaktır. Her iki metnin
sonunda da yeni satır işareti bulunduğuna dikkat edin. Bu programda dosya açma
kıomutundaki 'w' parametresini siler, yerine 'a' yazarsanız, bu metinlerin dosyanın içeriğine
eklendiğini görebilirsiniz.

Kullanımdaki dosyayı kilitleyin!
Web sunucusundaki dosyalarımızla sadece bir kişi işlem yapıyor olsa idi, bir sorun
olmazdı; ne var ki, bir Web sitesine aynı anda birden fazla kişi eriyebilir ve dosyalarla
işlem yapan programları çalıştırıyor olabilir. Bu, PHP'nin dosya işlemlerine engel olabilir. Bu
sebeple, işlem için açacağımız bir dosyayı, önce kilitlemek yerinde bir önlem sayılır. Bunu,
flock() fonsiyonu ile yaparız; bu fonksiyona kilitlemek istediğimiz dosyanın işaret
değişkeninin adını ve kilit türünü belirten endeks sayısını parametre olarak yazarız. Örnek:

Kod:

<?php $dosya_adi = "/inetpub/wwwroot/bir_dosya.txt"; 
$dosya = fopen ($dosya_adi , 'w') or die ("Dosya açılamadı!"); 
flock ( $dosya , 2); // dosyayı kilitle 
$metin = "Bu satır dosyaya yazılacak: Merhaba Dünya!\n";  
fwrite ( $dosya , $metin ) ; 
fputs ( $dosya , "Bu satır ise sonradan eklenecek\n" ) ; 
flock ( $dosya , 3); //dosyayı kilidini aç fclose ($dosya);  ?> 


Bu fonksiyon ile kullanabileceğimiz endeks parametreleri şunlardır:
1 Paylaşım Diğer proseslerin dosyayı paylaşmalarına imkan verir
2 Tam Diğer proseslerin dosyaile işlem yapmasına engel olur
3 Serbest Dosyanın 1 veya 2 olan kilidini kaldırır
Bir dosya, herhangi bir PHP programı tarafından kilitlendiği anda, aynı dsyayı daha
sonra kilitlemeye kalkan diğer programlar kendilerinden önce konulmuş kilide saygı
gösterirler.


Bu konudaki kullanıcılar
Guest
Forumu Atla  
Bu foruma yeni konular postalayamazsınız.
Bu forumda ki konulara yeni posta gönderemezsiniz.
Bu forumdaki postalarınızı silemezsiniz.
Bu forumdaki postalarınızı düzenleyemezsiniz.
Bu forumda anketler yaratamazsınız.
Bu forumdaki anketlere oy veremezsiniz.