İsmail Kırbaş ile Tasarım Yolculuğu [AnaSayfa] İsmail Kırbaş ile Tasarım Yolculuğu [AnaSayfa] İsmail Kırbaş ile Tasarım Yolculuğu [AnaSayfa]
 Site Haritası 
 
Site Map
Ana SayfaYeriniz | Ana Sayfa | Makaleler | Programcılık | PHP | PHP de Dosya İşlemleri

Diğer Yazılar
Yapı Taşları
PHP de Metin Düzenleme İşlemleri
Operatörler
Fonksiyonlar
Veri Aktarımı
Sekmeli Menü 1
Sekmeli Menü 2
Hızlı RSS Hazırlama
Web Formları İçin Güvenlik Kodu Oluşturma
PHP ye Giriş
PHP ye Giriş 2
Php ile COM Port Kontrolü
Kaya Sağlamlığında Kodlama


E-posta Gönderin Yorum Yazın
Güvenlik Kodu:9025Güvenlik Kodu:9025Güvenlik Kodu:9025Güvenlik Kodu:9025




En Son Okunan 10 Makale
  1. Freelance Olmak
  2. Dot.Com BOMB
  3. Renklerin Dili - Sarı
  4. Site Tasarımında Temel İlkeler (1)
  5. Kadın & Erkek
  6. Freehand Genel Bilgiler - 2
  7. Fotografta Kompozisyon
  8. İş Dünyasında Strese Dayanıklılık
  9. İnternette Marka Olmanın Anahtarları
  10. Zirveye Götüren Yönetim
 
PHP de Dosya İşlemleri>
Yazı Tipi KüçültYazı Tipi BüyütAna SayfaYazıcıdan ÇıkarPDF Belgesi Olarak GörüntüleFavorilerime EkleArkadaşıma Tavsiye EdeceğimRTF (Word Dokümanı) olarak görüntüle

İçindekiler

PHP ile sunucu üzerinde mevcut bir dosyayı açabilir, okuyabilir, dosyaya ek yapabilir yada yeni bir dosya oluşturabiliriz. Böylelikle örneğin ziyaretçilerden aldığımız bilgileri kaydedebilir yada PHP programımızın genel ayarlarını tuttuğumuz bir dosyayı bütün sayfalarımızda zahmetsizce kullanabiliriz.

PHP'nin ilk versiyonları metin işlemleri konusunda çok yetenekli olan Perl dili ile yazıldığı için bugün kendisi de text işlemlerinde en az Perl kadar yeteneklidir (PHP'nin son versiyonları C ile yazılmıştır). PHP'nin bu gücünü dosyalar üzerinde yapacağımız daha sonraki işlemlerde hep birlikte göreceğiz.

Harici Dosyalar (include)

PHP programlarında şüphesiz en çok kullanılan dosya işlemi bir dosyayı, üzerinde çalıştığımız dosyaya dahil etme işlemidir. Bu sayede dahil ettiğimiz dosya, dahil edildiği noktadan itibaren tüm içeriği ile çalıştığımız programın içindeymiş gibi davranabiliriz.

Örneğin PHP programımız boyunca tanımladığımız tüm fonksiyonları inc.fonksiyonlar.php gibi bir isimle kaydedip, bu fonksiyonları kullanmamız gereken sayfalara dahil edebiliriz. Böylelikle aynı fonksiyonları birden fazla sayfada kullanmamız gerektiğinde tekrar tekrar yazmaktan ve olası bir değişiklikte her birini birer birer bulup değiştirmekten kurtulmuş oluruz.

Başka bir örnek: Bir web sitesinin tüm sayfalarında değişmeyen bazı unsurları vardır. Site logosu, site adı, site emaili, sayfa başlığı, site genel renkleri vb. gibi. Siteye ait her sayfada bu bilgileri doğrudan yazmak hem zahmetli hem de risklidir. Çünkü ilerde yapılacak olası bir değişiklikte tüm sayfalar gözden geçirilmeli ve güncellenmelidir. Ama bunun yerine inc.sabitler.php gibi bir isimle tüm site sabitlerini bir dosyada toplayabilir ve sitedeki tüm sayfalarda bu dosyayı dahil ederek tanımladığımız site sabitlerini kullanabiliriz.

Harici dosyalarda PHP komutları olmak zorunda değildir. Düz metin içeren bir dosyayı da dahil edebiliriz.

Harici dosya dahil etme işlemi include() fonksiyonu ile yapılır. Genel kullanım şekli:

include("dosya_adi");

Örnek:


---------inc.sabitler.php------------
<?
// Bu dosyayı diğer dosyalara dahil edeceğiz..

define ("SITE_ADI","Kuzen.NET");
define ("SITE_ADR","www.kuzen.net");
define ("SITE_EML","info@kuzen.net");
define ("SITE_BG_COLOR","red");
?>

---------inc.fonksiyonlar.php------------
<?
// Tanımladığımız fonksiyonların bulunduğu dosya
// Bu dosya sadece lazım olduğu yerlerde include edilecek

function UyeMi($user,$pass)
{
    .........
}

function 
UyeBilgileri($user)
{
    ...........
    return 
$uye_bilgileri;
}

function ...

?>

---------index.php------------
<?
// Site anasayfası
include("inc.sabitler.php");      //Artık sabitleri kullanabiliriz.

print   "<html>"
        
."<head>"
        
."<title>".SITE_ADI."</title>"
        
."</head>"
        
."<body bgcolor=".SITE_BG_COLOR.">";

.............


?>

---------uyebilgi.php------------
<?
// Site bilgi sayfası
include("inc.sabitler.php");      //Artık sabitleri kullanabiliriz..
include("inc.fonksiyonlar.php");      //Artık fonksiyonları kullanabiliriz..

if (UyeMi($login,$password))
{
    
$uyeBilgi=UyeBilgileri($login);
    .........
}
else
    print 
"Üye bilgileriniz geçersiz..";
?>

Sayfa başına geri dön..

Dosya Bilgileri

Dosyalar üzerinde bir işlem yaparken bazı ihtimalleri göz önünde bulundurmalıyız. Herhangi bir nedenden ötürü çağırdığımız dosya silinmiş olabilir ya da dosya adı zannettiğimiz isim bir klasöre ait olabilir. Bu nedenle dosyayı dahil (include) etmeden ya da okumak, eklemek amacıyla açmadan önce bazı kontroller yapmamız programların selahiyeti için önemlidir.

Dosyalar hakkında bilgi edinemize imkan tanıyan bazı fonksiyonlara değinelim..

Dosya var mı? file_exists()
Bir dosyanın var olup olmadığını kontrol eder, dosya varsa TRUE (Doğru) yoksa FALSE (Yanlış) değerini döndürür.

<?
if (file_exists("dosya_adi.txt"))
    print 
"Dosya Var..";
?>

Dosya mı? Dizin mi? is_file() , is_dir()
is_file() fonksiyonu parametre olarak aldığı değerin bir dosya ismi olması halinde TRUE, aksi halde FALSE değerini döndürür. Benzer şekilde is_dir() fonksiyonu da parametre olarak aldığı değerin bir dizin olması halinde TRUE, aksi halde FALSE değerini döndürür. Örneğin, bu iki fonksiyonla bir dizinin içindeki dosya ve dizinleri sıralarken hangisinin dosya hangisinin dizin olduğunu anlayabilir ve ona göre dosyaları ayrı dizinleri ayrı simgelerle gösterebiliriz.

<?
if (is_file("dizinelemani"))
    print 
"Bu bir dosya..";
elseif (
is_dir("dizinelemani"))
    print 
"Bu bir dizin..";
?>

Dosya Okunabilir mi? is_readable()
Bir dosyayı okumak için o dosyanın var olması yetmeyebilir. Eğer dosyayı okuma hakkımız yoksa bunu yapamayız. is_readable() fonksiyonu dosya okunabilir durumda ise TRUE, değilse FALSE değerini döndürür.

<?
if (is_readable("dosya_adi.txt"))
    print 
"Bu dosya okunabilir..";
?>

Dosya boyutu filesize()
Adını verdiğimiz dosyanın boyutunu byte olarak bildirir.

<?
print "Dosyanın boyutu: ".sizeof("dosya_adi.txt");
?>

Sayfa başına geri dön..

Dosya Oluşturma Ve Silme

PHP programlarımızda sunucu üzerinde bir dosya oluşturmak için touch(), bir dosyayı silmek için ise unlink() fonksiyonu kullanılır. Bu işlemleri ancak web sunucusunun erişim hakkının olduğu ve okuma / yazma yapabildiği bir dizinde gerçekleştirebiliriz.

<?
$dizin
="/home/hcivelek/public_html/raporlar";
touch ("$dizin/rapor1.txt")
?>
.......
<?
$temp
="/tmp";
unlink("$temp/gecici1.txt");
?>

Sayfa başına geri dön..

Dosya Açma

PHP'de bir dosyayı okumak ya da dosyaya yazmak için öncelikle o dosyanın açılması gerekmektedir. Dosyayı açarken bir parametre ile okuma mı yazma mı yapacağımızı da belirtmeliyiz. Dosya açma komutu fopen() fonksiyonudur. Dosyayı okumak için "r", dosyaya (üzerine) yazmak için "w", dosyaya ek yapmak için "a" parametresini kullanmalıyız.

$dosya=fopen("dosya_adi",'r');

Dosyayı herhangi bir modda açarken fopen()'den dönen değeri bir değişkende tutmalıyız. Bu sayede o dosya üzerinde program boyunca yapacağımız her işlemde bu değişkeni kullanabiliriz. Olmayan bir dosyanın okuma modlu açılmak istenmesi durumunda program hata verecektir. Bu nedenle yukarda değindiğimiz dosya işlemleri fonksiyonlarından yararlanmalı ve dosyanın gerçekte var olup olmadığını denetledikten sonra okuma modlu açmalıyız. Bir dosyayı, üzerine yazmak için açmak istediğimiz zaman kodu şöyle yazmalıyız:

$dosya=fopen("dosya_adi",'w');

Yazmak için açtığımız dosya hali hazırda bulunmuyorsa PHP önce bu dosyayı oluşturur. Yazma modlu açılan dosyanın üzerine yazılacağı için eski bilgileri silinecektir. Bir dosyanın eski bilgilerini koruyarak dosyaya ekleme yapılmak istendiği zaman ise kod şu şekilde olmalıdır. Olmayan bir dosya ek yapılmak üzere açılmak istendiğinde program hata verecektir.

$dosya=fopen("dosya_adi",'a');


Bir Fonksiyonu Durdurmak İçin: ÖL
Bir PHP fonksiyonunun kendisinden beklenilen işi yapamaması durumunda anında durdurulmasını sağlamak için die() fonksiyonu kullanılabilir. Öl anlamına gelen ve programı sonlandıran bu fonksiyona ekranda görüntülenmesi üzere bir metin bilgisini parametre olarak verebiliriz.

Örnek: $dosya=fopen("dosya_adi.txt",'r') or die ("Dosya açılamıyor..")

Açtığımız bir dosyadaki tüm işlemlerimiz bittiğide dosyanın kapatılması gerekir. Dosya kapatma işlemini fclose() fonksiyonuna dosya değişkenini (adını değil) parametre olarak vererek yaparız.

fclose($dosya);

Sayfa başına geri dön..

Dosya Okuma

PHP'de bir dosyanın içindeki bilgileri çekmek için üç farklı fonksiyon vardır: fgets(), fread(), fgetch() .

fgets()
Bu fonksiyon parametre olarak daha önce açılmış olan dosyaya ait değişkeni ve asgari okuyacağı byte miktarını alır. Fonksiyon, verdiğimiz uzunluk ölçüsüne ulaşmadan önce dosyada yeni satır işareti görürse yada dosya sonuna ulaşırsa okumaya son verir. Genelde dosyadan satır satır okuma yaptığımız durumlarda dosyanın tamamını okumak için bir döngü kullanırız. Döngü koşulu olarak dosya sonuna ulaşılıp ulaşılmadığını feof() fonksiyonu ile kontrol etmemiz gerekir.

<?
$dizin
="/www/php";
$dosya_adi="ornek.txt";

if (
$dosya=fopen("$dizin/$dosya_adi",'r'))
{
    print 
"Dosya Adı: ".$dosya_adi."<br>";

    
$i=0;
    while(!
feof($dosya))   //dosya sonu gelmediği müddetçe
    
{
        
$i++;
        
$satir=fgets($dosya,1024);
        print 
$i.".Satır: ".$satir."<br>";
    }
}
else
    print 
"Dosya açılamadı: ".$dosya_adi;
?>

fread()
Dosyadan satır satır değil de blok okumak istediğimiz durumlarda bu fonksiyonu kullanırız. fgets() ile aynı parametreleri alır, farklı olarak yeni satır karakteri görünce durmaz. Bu sayede dosyadan tamamını ya da belirttiğimiz uzunlukta bir bloğunu okuyabiliriz.

<?
$dizin
="/www/php";
$dosya_adi="ornek.txt";

if (
$dosya=fopen("/",'r'))
{
    print 
"Dosya Adı: ".."<br>";
    print 
"Dosya Boyu: ".filesize()." Byte<br>";

    
$blok=fread($dosya,filesize($dosya_adi));
    print 
"Dosya İçeriği: <br>";
    print 
nl2br($blok);
}
else
    print 
"Dosya açılamadı: ".$dosya_adi;
?>

Bu örnekteki nl2br() fonksiyonu metin işlemleri konusunda da göreceğimiz bir fonksiyondur. Parametre olarak aldığı metindeki yeni satır karakterlerini HTML etiketi olan ve tarayıcı ekranında yeni bir satıra geçilmesini sağlayan <br> ifadesine dönüştürmeye yarar.

fgetc()
Bu fonksiyon dosyadan her defasında bir karakter okutmak için kullanılır Daima 1 byte veri okuyacağı için parametre olarak sadece dosya değişkenini alır..

<?
$dizin
="/www/php";
$dosya_adi="ornek.txt";

if (
$dosya=fopen("$dizin/$dosya_adi",'r'))
{
    print 
"Dosya Adı: ".$dosya_adi."<br>";

    
$i=0;
    while(!
feof($dosya))   //dosya sonu gelmediği müddetçe
    
{
        
$i++;
        
$krk=fgetc($dosya);
        print 
$i.".Karakter: ".$krk."<br>";
    }
}
else
    print 
"Dosya açılamadı: ".$dosya_adi;
?>

Sayfa başına geri dön..

Dosyaya Yazma - Ek Yapma

Bir dosyaya yazma yada ek yapma PHP için aynı şeydir; sadece dosyaların açılışında fark vardır. Dosya, w (write) parametresi ile açılmışsa yazma işlemi dosyanın en başından başlar, a (append) parametresi ile başlamışsa yazma işlemi dosyanın sonundan başlar.

Dosyaya yazma fonksiyonları fwrite() ve fputs()'dur. Bu iki fonksiyon tamamen aynı işi yapar. Aralarında bir fark yoktur. Genel kullanım şekilleri:

fputs($dosya,"Dosyaya yazılacak yada eklenecek ifade..");

Örnek:

Sitemize gelen ziyaretçilerin IP'lerini ve ziyaret saatlerini bir dosyada tutacak bir fonksiyon yazalım. IP'leri kaydedeceğimiz dosyanın giderek şişmemesi için belli bir boyutu aştığında dosyayı tekrar sıfırdan oluşturmaya başlayalım.

<?
function LogTut()
{
    global 
$REMOTE_ADDR;   // Siteye bağlanan makinenin IP adresini tutan sunucu değişkeni

    
$logDosyasi="/tmp/site_log.txt";
    
$logSiniri=1024*1024// 1MB

    /* Tarih ve saat bilgisini yazdırmak için date() fonksiyonunu kullanıyoruz
    date() fonksiyonu çok işlevli ve kullanışlı bir fonksiyondur. Diğer konularda değinilecektir.*/
    
$tarihSaat=date("d-m-Y H:i:s"); // Örn. 21-06-2002 14:30:05

    /* Log dosyası, dosya yoksa hata oluşmaması için ya da varsa ve boyutu 1 MB'yi aşmıssa sıfırlanması
    için "w" modunda, diğer durumlarda "a" modunda açılacaktır */
    
$mod=(!file_exists($logDosyasi) or (file_exists($logDosyasi) and sizeof($logDosyasi)>$logSiniri)) ? "w" "a" ;

    
$dosya=fopen($logDosyasi,$mod);

    
/*Dosyamızdaki satırların düzenli olması için saat ile IP arasına TAB karakteri,
    IP'den sonra da satır başı karakeri ekliyoruz...*/
    
fputs ($dosya,$tarihSaat."t".$REMOTE_ADDR."n");

    
fclose($dosya);
}
?>

Aşağıdaki ekran çıktısı bu fonksiyonun çağrılmasıyla tutulan log dosyasına aittir.


Kullanımdaki dosyayı kilitlemek
Web sunucusu üzerinden aynı anda pek çok kisi bağlantı kurabileceği için aynı anda birden fazla kişi yazdığımız PHP programı üzerinden bir dosyaya erişip dosyaya ekleme yada dosyanın üzerine yazma işlemi yapmak isteyebilir. Bu durum PHP'nin dosya işlemlerin engel olabileceği gibi başka sorunlara da yol açabilir. Örneğin bir şirketin farklı illerindeki şubeleri ortak bir dosyadan ürünlerin stok miktarlarını çekip, satış yapıldığı müddetçe bu dosyayı güncelliyorlarsa yukarıdaki durum karışıklık yapacaktır. Bunu engellemek için yazmak yada eklemek üzere açtığımız dosyayı flock() fonksiyonu ile kilitleyip işlemlerimizi bundan sonra yapmamız gerekir. Fonksiyon, ikinci parametre olarak dosyaya uygulayacağı kilitleme işlemin indis numarasını alır. Bu indis numaraları: 1=Paylaşım (Diğer proseslerin dosyayı kullanmasına izin verir), 2=Tam (Diğer proseslerin dosya ile işlem yapmasına engel olur), 3=Serbest (Dosyanın 1 veya 2 olan kilidini kaldırır).

Örnek:
$dosya=fopen("dosya_adi.txt","a");
flock($dosya);

Sayfa başına geri dön..

Dizin İşlemleri

PHP, sunucu üzerinde dosya işlemlerinin yanında dizin işlemleri konusunda da yeteneklidir. Dizinler hakkında bilgi edilinebilir, çalışılan dizinde bize yazma hakkı tanınmış olduğu takdirde yeni alt dizinler oluşturabilir yada silebiliriz. Dizinler konusunda yardımcı olacak bazı fonksiyonlara göz atalım.

Dizin içeriğini listeleme: opendir() ve readdir()
Dosya işlemlerindekine benzer olarak dizin işlemlerinde de önce dizini opendir() fonksiyonu ile açmalı ve üzerinde işlem yapabilmek için bir değişkene atamalıyız. readdir() fonksiyonu açılan dizinin içindeki alt dizin ve dosyaları tek tek okumamızı sağlar. Tüm dizinin içeriğini okuyabilmek için bir döngü kurmamız gerekmektedir. Aşağıdaki örneği inceleyelim.

<?
$dizin_adi
="."//Bulunduğumuz dizin..
$dizin=opendir($dizin_adi);

// readdir fonksiyonu $bilgi değişkenine değer döndürdüğü müddetçe..
while($bilgi=readdir($dizin))
{
    if (
is_dir("$dizin_adi/$bilgi"))
        print 
"<b>[$bilgi]</b><br>";
            
/* Dizin adları dosyalardan farklı olsun diye
            köşeli parantez içinde ve kalın harflerle gösteriyoruz..*/

    
elseif (is_file("$dizin_adi/$bilgi"))
        print 
"$bilgi<br>";
}
?>

Bu kodun çıktısı:

[.]
[..]
php1.php
out1.php
[images]
inc.format.php
php2.php
info.php
php3.php
php4.php
php5.php
out2.php
form1.html
formisle1.php
php6.php
ornek.txt
site_log.txt

Dizin oluşturma: mkdir()
Yazma hakkımızın olduğu dizinde yeni bir alt dizin açmak için mkdir() fonksiyonunu kullanırız. Parametre olarak yeni açılacak dizinin adını ve bu dizinin haklarını belirten 8 tabanlı (octal) sayı cinsinden yazılmış, önüne de bir tane 0 (sıfır) konmuş bir ifade almaktadır. İkinci parametre sadece Unix türü işletim sitemlerinde çalışılan sunucular için geçerlidir. Bu parametre örneğin 0777 olarak verilince dizin üzerinde herkes için okuma ve yazma hakkı olacağını belirtir.

mkdir("deneme",0777);

Dizin silme: rmdir()
Yazma hakkımızın olduğu dizinleri silmek için rmdir() fonksiyonunu kullanırız. Parametre olarak sadece dizin adını alır.

rmdir("deneme");


Not: Yazılar konusundaki yorumlarınız için lütfen Yorum Yazın bölümümüzü kullanın.

Yazar : Hasan Civelek
Son Güncelleme : 14 Mayıs 2005, Cumartesi
Sayfa Sürümü : 1
Okunma Adedi : 11,944
Son Okunma : 2017-07-27 06:48:53
Kaynaklar : http://www.bthayat.net/site/yazi_goster.php?id=187

Yapı Taşları PHP de Dosya İşlemleriPHP de Metin Düzenleme İşlemleri
© [Site Haritası]
| Makaleler | Seyir Defteri | Kaynaklar | İndirin | İletişim |

RSS dosyasını görmek için tıklayınız. RSS dosyasını görmek için tıklayınız.XML versiyonu için tıklayınız WAP versiyonu için tıklayınız Bu site DyNA İçerik Yönetim Sistemi üzerinde çalışmaktadır.
İsmail KIRBAŞ ile Tasarım Yolculuğu Anasayfa İsmail KIRBAŞ ile Tasarım Yolculuğu Anasayfa İsmail KIRBAŞ ile Tasarım Yolculuğu Anasayfa
ismail kırbaş ile web sitesi tasarimi sitemap ismail kırbaş ile web sitesi tasarimi sitemap
  Sitemizde 12 kişi çevirimiçi | Bugün =247 | Dün =357 | Bu Ay=6,631 | Günlük En Fazla=1,109 tekil ziyaretçi