|
|
PHP’de Dosya İşlemleri
PHP kendi dışındaki bir dosyayı okutup veya içindekileri aynen alıp görüntülemesini sağlayabilir. PHP’deki dosya işlemleri aşağıdaki başlıklar altında işlenecektir.
Harici dosya (include)
İnclude komutu 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 kullanılan bir metin veya program parçası dahil edilebilir. Örneğin; aşağıdaki metin “harici_dosya01.txt” adıyla ve düzyazı biçiminde kaydedilirse,
"Ben harici bir dosyanın içindeki yazıyım.. Beni bir PHP programı alıp buraya getirdi! Kendisine teşekkür ederim"
Daha sonra yapılacak bir programa bu metin dosyası include komutu kullanılarak ekleme yapılabilir.
<?php
include ("harici_dosya01.txt");
print ("\n<p> Ben zaten bu programının içinde olan bir yazıyım. Baştan beri burada olduğuma çok memnunum.. Harici dosyaya hoş geldin diyorum!</p>");
?>
Buradaki include komutu “harici_dosya01.txt” harici dosyasını alarak içeriğini aynen kendi bulunduğu noktada, PHP’nin oluşturacağı HTML dosyasına katar. Ayrıca PHP programına program veya fonksiyon da eklenebilir. Örneğin;
<?php
print ("Ben de harici dosyayım.!<br>");
print ("Ama ben hesap da yaparım.. Örneğin iki iki daha ". (2 + 2). " eder!");
?>
Burada oluşturulan harici dosya program tarafından eklenildiğinde, harici dosyada yer alan “...iki iki daha ” . (2 + 2) . “ eder!” şeklindeki ifade programa gelirken “..iki iki daha 4 eder!” şeklinde gözükür. PHP 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 de program olarak ele alır. Bu yolla PHP programlarında bir değerin dönmesi de sağlanabilir.
Harici dosyaların include yoluyla PHP programlarına 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 .
Require komutu
PHP4.0’da include komutu gibi işleyen, ancak ondan farklı olarak kendisini çağıran programa değer veremeyen require komutu da kullanılabilir. İç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 programa dahil edilebilir.
Include ile eklenecek dosyaların adlarının, PHP programının oluşturması sağlanarak programlarda dinamizm sağlamak mümkün olabilir. Örneğin; bir menünün seçilmesiyle harekete geçen bir Javascript fonksiyonunun, ziyaretçinin gideceği sayfaya göndereceği değerler include komutuna dosya adı oluşturmakta kullanılabilir. Bazen de include komutuna dosya adı oluşturmak için program içindeki döngülerden yararlanılabilir. Örneğin;
for ( $i = 1 ; $i <= 3 ; ++$i) {
include ("dosya0" . $i . ".txt");
}
Bu kod parçasıyla “dosya01.txt, dosya02.txt ve dosya03.txt“ isimli harici dosyalar sırasıyla çağrılır ve alt alta ana programa dahil edilir .
Dosya oluşturma ve silme
PHP ile yapılabilecek önemli dosya işlemlerinin başında, bir dosyayı oluşturmak ve olan bir dosyayı silmek gelir. PHP’nin dosya oluşturma komutu touch()’dır. Bu fonksiyona oluşturulmak istenilen dosyanın adı yazılır. Örneğin;
<?php
$dosya_dizin = "/inetpub/wwwroot/";
touch ("$dosya_dizin/yeni_belge.txt");
print ("yeni_belge adlı bir dosya oluşturuldu!");
?>
Bu program kişisel web sunucusunda denenirken, yeni dosyanın oluşturulacağı dizin olarak "/" işaretiyle sadece kök dizin belirtilirse, dosya “C:” diskinde kök dizinde oluşturulur. Bu programın gerçek sunucuda çalıştırılabilmesi için yazma/okuma izni bulunan ve web sunucunun erişebileceği bir dizinin adının verilmesi gerekir . Örneğin;
<?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şturulan dosya, içi boş bir metin dosyası olacaktır. Eğer belirtilen dizinde bu adı taşıyan başka bir dosya varsa PHP dosyanın içeriğine dokunmaz, fakat dosyanın erişim ve değişim tarihleri değişir.
PHP ile mevcut bir dosyayı silmek için unlink() fonksiyonu kullanılır. Bu fonksiyonu kullanmak için silinecek dosyanın adını ve yolunu yazmak gerekir. Örneğin;
<?php
$dosya_dizin = "/wwwroot/mycgiserver.com/members/uNhM13Qnm/";
unlink ("$dosya_dizin/yeni_belge.txt");
print ("yeni_belge adlı dosya silindi!");
?>
PHP’de dosya açmak ve kapatmak
PHP’de bir dosyanın içeriğinin alınarak web sayfalarında kullanılması veya bir dosyanın içeriğini değiştirilmesi gibi işlemlerin yapılabilmesi için önce dosyanın açılmış olması gerekir. PHP’de dosyayı açmak için fopen() fonksiyonu kullanılır. Bu fonksiyon kullanılarak bir dosya okunmak (‘r’), yazdırmak (‘w’) veya ek yapmak (‘a’) için açılabilir. Bu fonksiyon dosyanın başarıyla açılması halinde bir tamsayı verir. PHP programlarında, açılan dosyanın mutlaka ona işaret eden bir değişkene (file pointer) bağlı olması gerekir. Daha sonra bu dosya ile ilgili bütün işlemler bu işaret değişkeni ile yapılabilir. Örneğin;
$dosya = fopen( "bir_dosya.txt" , 'r' );
PHP bu dosyayı sadece okumak amacıyla açar ve fonksiyondan dönen değeri $dosya değişkenine atar. Olmayan bir dosya açılmak istenildiği zaman PHP hata mesajı verir. Bir dosyanın, yazma amacıyla açılması için aşağıdaki kod yazılmalıdır.
$dosya = fopen( "bir_dosya.txt" , 'w' );
Olmayan bir dosya, yazmak amacıyla açılmak istenirse, PHP önce bu dosyayı oluşturur. Bir dosyaya ek yapmak istenildiği zaman ise aşağıdaki kod yazılmalıdır.
$dosya = fopen( "bir_dosya.txt" , 'a' );
Olmayan bir dosya, ek yapılmak amacıyla açılmak istenirse PHP hata mesajı verir. Açılan bir dosya ile yapılan bütün işlemler bittikten sonra, dosyanın kapatılması gerekir. PHP’de dosya kapatma işlemini fclose() fonksiyonu yapar. Bu fonksiyona parametre olarak dosya adı değil, dosyanın işaretçisi olan değişkenin adı verilir. Örneğin;
fclose ( $dosya );
PHP’de dosya okuma (fgets() ve fread())
PHP’de bir dosyanın içeriğinin satır satır okutulması için fgets() fonksiyonu kullanılır. Bu fonksiyona daha önce açılmış olan dosyanın işaret değişkenin adı ve okunması istenilen asgari byte ölçüsü parametre olarak verilir. fgets() fonksiyonu verilen 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 fonksiyon çoğu zaman bir döngünün içerisinde kullanılır. Ancak döngünün hata vermemesi için, PHP’nin dosyanın sonuna ulaştığında döngüyü durdurması gerekir. fgets() fonksiyonunun okuyacağı satır bir fonksiyona değer olarak verilebilir ve daha sonra bu değer programlarda kullanılabilir. Örneğin;
<?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 varolan bir dosyayı açar ve bu dosyanın işaretçisi olarak $dosya değişkenini kullanır. Daha sonra bir while() döngüsü içinde bu değişken ve 1 KB (1024 byte) ölçüsünü parametre olarak verilerek, fgets() fonksiyonu ile dosyadan bir satır okutulur. fgets() fonksiyonundan dönen bir satırlık metin, burada $satir değişkenine atılır ve daha sonra print() fonksiyonu ile bu satır tarayıcı penceresine gönderilir. Bu işlemin internetteki bir web sunucuda uygulanabilmesi için yazma/okuma izni bulunan ve web sunucunun erişebileceği bir dizinin adının verilmesi gerekir. while() döngüsünün devam şartı olarak kullanılan 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şıldığında döngü sona erer. Okuma işlemi durabilen bir döngüye bağlanmazsa, fgets() PHP’nin bir programın sona ermesi için verilmiş olan, varsayılan süresi doluncaya kadar dosyayı okuma işlemine devam etmek ister.
Kimi zaman dosyaların içeriği satır satır okutulmak yerine, programcı tarafından tayin edilecek uzunluktaki parçalar halinde okutulmak istenir. Bu işlem fread() fonksiyonu kullanılarak gerçekleşebilir. Örneğin;
<?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ı istenilen asgari byte ölçüsünü parametre olarak alır. fread() fonksiyonu verilen 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, verilen uzunluk ölçüsünün almak istenilen metin parçasına uygun olup olmadığı sınanmalıdır .
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. Bir dosya yazmak amacıyla şu kod yazılmalıdır;
$dosya = fopen( "bir_dosya.txt" , 'w' ) or die ("Dosya açılamıyor!") ;
ek amacıyla açmak için ise şu kod yazılmalıdır;
$dosya = fopen( "bir_dosya.txt" , 'a' ) or die ("Dosya açılamıyor!") ;
Daha 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çı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 getirir ve aralarında fark yoktur. Örneğin;
<?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ırıldığında, bir_dosya.txt adlı dosyada mevcut bütün içerik silinir ve yerine $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 yazılır. Bu programda dosya açma komutundaki ‘w’ parametresinin yerine ‘a’ yazılırsa, bu metinler dosyanın içeriğine eklenir
Sanalpusula.Net