Php Dersleri – Dosya Ve Klasör İşlemleri

Merhaba arkadaşlar mobilhanem.com için hazırladığımız php derslerimizde bu ders Dosya ve Klasör işlemlerine başlangıç yapacağız.  Öncelikle klasör işlemlerinden başlayalım. Klasör işlemlerinde önemli olan klasörün dosya sisteminde nerede olduğudur. Bir klasörün yerini belirlemek için absolute path ve relative path olmak üzere iki yöntem vardır.

Absolute Path

Absolute path yönteminde klasörün  dosya sistemindeki tam yolu kullanılır.

Örneğin:

C:\wamp\www\mobilhanem
C:\wamp\www\mobilhanem\dersler

http://mobilhanem.com/wp-content/
http://mobilhanem.com/wp-content/plugin

Biz mobilhanem klasöründeysek dersler klasörüne gideceksek absolute path yöntemi ile  C:\wamp\www\mobilhanem\dersler şeklinde erişiriz.

Relative Path

Relative pathda ise   bir klasörün bizim içinde  bulunduğumuz klasöre göre konumu kullanılır.

Örneğin şöyle bir dosya sistemi yapımız olsun.

C:\wamp\www\mobilhanem
C:\wamp\www\mobilhanem\dersler
C:\wamp\www\mobilhanem\deneme
C:\wamp\www\mobilhanem\aaa

Biz mobilhanem  klasöründeysek  dersler klasörüne gitmek için relative path yöntemi ile dersler/ şeklinde gideriz.

Php Klasörler İçinde Gezinmek

Klasörler içerisinde gezinmek neredeyse bütün programlama dillerinde aynıdır.  Genellikle mevcut bir klasörün içerisindeysek  relative path, mevcut bir klasörde değil isek absolute path kullanırız.

  • Önceki klasöre gitmek için ../
  • iki önceki klasöre gitmek için ../../
  • Bulunduğumuz klasör ./
  • Sonraki klasörler ./a/b yada a/b

Şimdiye kadar verdiğimiz bilgiler dosya sistemiyle alakalı genel bilgilerdi arkadaşlar.

Php Klasör Oluşturma

Php de klasör oluşturmak için mkdir() fonksiyonu kullanılır.

mkdir(‘klasör adı’,CHMOD); Chmod değeri klasör üzerinde yetkilendirme yapar chmod değeri olmadan sadece klasör adını yazarakta klasör oluşturabiliriz.

Chmod değerlerinden bu dersimizde bahsetmeyeceğimden chmod değerini kullanmayacağız.

Örnek:

<?php
$olustur = mkdir("mobilhanem");
if($olustur) echo "Klasör Oluşturuldu.";
else echo "Klasör Oluşturulamadı";
?>

Kodumuzu yazdıp çalıştırdığımızda index.php dosyamızın bulunduğu kısımda bir mobilhanem klasörü oluşacaktır.

Kodu iki kez çalıştırırsak bu klasör zaten var hatası alacağız. Bunun için dosya varmı yokmu kontrolü yapmamız gerekir.

file_exist(“PATH”) fonksiyonu verilen pathte dosya veya klasör var ise geriye ture, yok ise false döndüren bir boolean fonksiyondur.

 

Örnek:

$klasorYol = "mobilhanem";
if(!file_exists($klasorYol)) {
	$olustur = mkdir("mobilhanem");
	if($olustur) echo "Klasör Oluşturuldu.";
	else echo "Klasör Oluşturulamadı";
}else {
	echo "Bu Klasör Zaten Var !";
}

Php Dosya Veya Klasör Taşıma – İsim Değiştirme

Dosya veya klasör taşıma işlemi için taşınacak klasörün var olup olmadığı kontrolünü yapmanız her zaman gerekir. Örneğin:

$klasorYol = "mobilhanem";
$yeniKlasorYol = "ders/mobilhanem";
if(file_exists($yeniKlasorYol)) {
	$tasi = rename($klasorYol,$yeniKlasorYol);
	if($tasi) echo "Klasör Taşındı.";
	else echo "Klasör Taşınamadı.";
}else {
	echo "$yeniKlasorYol Konumu Bulunamadı.";
}

Dosya adı değiştirme örneği:

$klasorYol = "mobilhanem";
if(rename($klasorYol,"mobilhanem2")) {
	echo "Klasör Adı Değiştirildi";
}else {
	echo "İsim Değiştirilemedi.";
}

Php Klasör Silme

rmdir fonksiyonu ile klasörü silebiliriz.  Klasörü silmek için klasörün içerisini boş olmak zorundadır. Aksi takdirde klasör silinmez ve hata mesajı alırız. 

örnek:

if(rmdir("mobilhanem2")) {
	echo "Klasör Silindi";
}else {
	echo "Klasör Silinemedi.";
}

Php Klasör içerisindeki dosya ve klasörleri listeleme

dosya ve klasörleri listelemek için opendir ve readdir fonksiyonlarını kullanırız.

opendir(PATH) verilen pathteki klasörü açar.  geriye içeriği döndürür.

readdir()  opendir fonksiyonundan  gelen içeriği alır ve okur.

Örneğin:  Bulunduğumuz klasörün içeriğini listeleyelim.

$ac = opendir("./"); // bulunduğumuz klasörü  açsın
while($veri = readdir($ac))
	echo $veri."<br/>";

Burada ilk çıkan . ve .. işaretleri bir alt dizini ve şuanki dizini ifade eder.

Bir verinin dosyamı klasör mü olduğunu öğrenmek için is_file() fonksiyonunu kullanırız.

is_file(PATH) verilen path deki verinin dosya mı klasör mü olduğuna bakar dosya ise true döndürür.

Yukarıdaki örneğimizde klasörlerin yanına klasör dosyaların yanına  dosya yazalım.

$ac = opendir("./"); // bulunduğumuz klasörü  açsın
while($veri = readdir($ac)) {
	$tip = is_file($veri) ? "(Dosya)" : "(Klasör)";
	echo "$veri $tip <br/>";
}

Php Dosya Oluşturma

Phpde touch() fonksiyonu ile dosya olutşrurulur.

touch(DOSYA_ADI)  parametre olarak dosya adını alır ve dosya oluşturulursa geriye true değeri döner.

örneğin mobilhanem.txt dosyasını oluşturalım.

if(touch("mobilhanem.txt")) echo "Dosya Oluşturuldu";
else echo "Dosya Oluşturulamadı";

Php ile Dosya Açmak

Phpde dosya içeriğini açmanın bazı seçenekleri vardır. değiştirmek için açmak, sonuna eklemek için açmak gibi gibi. Bu özellikleri aşağıdaki tabloda görebilirsiniz.

Kip Açıklaması
r Dosyayı okumak için açar. (read)
r+ Dosyayı hem okumak hem de yazmak için açar. (read)
w Dosyayı yazmak için açar. Var olan içeriği siler (write)
w+ Dosyayı hem yazmak hem de okumak için açar. Var olan içeriği
siler, baştan yazar. (write)
a Dosyayı yazmak için açar. Var olan içeriği silmez
sonuna ekler. (append)
a+ Dosyayı hem yazmak hem de okumak için açar. Var olan içeriği
silmez sonuna ekler. (append)
x Dosyayı oluşturur ve yazmak için açar. Eğer dosya
zaten varsa FALSE döner.
x+ Dosyayı oluşturur, yazmak ve okumak için açar. Eğer dosya
zaten varsa FALSE döner.

Php de dosyayı fopen ile açarız.

fopen() iki parametre alır. Birinci parametre dosya yolu ikinci parametre ise yukarıdaki tablodaki kiplerden biridir.

fopen() tek başına bir işe yaramaz sadece dosya ile bağlantı kurar. Şimdi fopen fonksiyonunu işe yarar bir hale getirelim.

fwrite(ACMA_DEGISKENI,VERI ) fwrite dosyaya veri yazar. İki parametre alır. Birinci parametre dosya açma yani fopen fonksiyonu, ikinci değişken ise yazacağın veridir.

fclose(ACMA_DEGISKENI) Açılan bir dosyayı kapatır. parametre olarakta fopen fonksiyonunun değişkenini alır.

Örneğin: mobilhanem.txt dosyasına mobilhanem.com yazıp kaydedelim.

<?php

$ac = fopen("mobilhanem.txt","a+");
fwrite($ac,"mobilhanem.com");
fclose($ac);

?>
 
 

Dosya içerğine bakarsak mobilhanem.com yazdığını görürüz.

Şimdide dosya içeriğini okuyalım.

fread(OPEN, BAYT)  fopen fonksiyonu ile dosya okuruz. Parametre olarak dosya open bağlantısı ve kaç bayt okunacağını alır. geriyede veriyi döndürür.

filesize($dosya) parametre olarak aldığı dosyanın boyutunu döndürür.

<?php

$ac = fopen("mobilhanem.txt","r");
$icerik = fread($ac, filesize('mobilhanem.txt'));
echo $icerik;
fclose($ac);

?>
 
 

 

 

Evet arkadaşlar genel olarak dosya sisteminden dosya ve klasör işlemlerinden bahsettik ve bir dersimizin daha sonuna geldik. Bir sonraki dersimiz olan Php Dersleri – Temel String Fonksiyonları dersimizde görüşürüz.

Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı yine konu altından ve Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.

Tüm php dersleri için tıklayınız..

55

Vehbi Akdoğan

Erzurum Atatürk Üniversitesi Bilgisayar Mühendisliği Mezunu
Web & Android Developer
#erzurumspor

9 Yorum

  • Merhaba, Ben ben bir tablo oluşturdum.. şimdi tablonun “proje_ismi” klasorunu su sekılde belırlemek ıstıyorum:

    Proje ismi = bir klasorun ıcerısındekı bulunan (her bır klasor bır proje) her klasorun ısmı benım tabloma proje ısmı olarak dusmesını ıstıyorum.. klasorumu sılersem benım tablomdan sılınecek yenı proje eklersem tabloma eklenecek. Bunu nasıl yapabılırım…

    (çalışmalarımı localhostta yapıyorum)

    • merhaba tablodan kastın veri tabanı tablosuysa sürekli filesystemi dinlemen gerekir. Ama normal bir html tablosunda görmek istiyorsan glob fonksiyonunu kullanarak klasörleri tabloya yazdırabilirsin.

      • tam olarak soyle… html de tablo olusturdum.. veri tabanından verileri alıyor su anda… html de proje ısmı adında bır sutun var… Su anda databaseden manuel olarak gırıs yapabılıyorum.. ama bu manuel gırısı:

        Benim istediğim :

        bilgisayarın C:\xampp\htdocs\deneme (deneme tablomun olduug klasor.)

        Buraya projeler adından bir klasor olusturacagım:
        Sonra bu klasorun altına yenı klasorler eklemeye baslayacagım her klasor bır proje ısmı olacak sekılde.

        buraya ekleyecegım her klasor ısmı verı tabanına gıderek bır proje ısmı olarak acılacak.. klasoru sıldıgımde ıse verı tabanından proje sılınmıs olacak..

        Sonuc:

        Her klasor ekledıgımde verı tabanında bır satır olusturulacak o klasor adıda proje_ismi sutununa gelecek.

        Klasoru sıldıgım zaman ıse html de proje sılınecek

        • bu işlemleri tersten yapman daha mantıklı olur senin için. şuan söylediğin şekilde yaparsan filesystemi sürekli dinlemen gerekir buda php için istenmeyen bir durum node js falan kullanabilirsen dediğin şekilde yapabilirsin. benim sana tavsiyem verileri direk veri tabanına ekle veri tabanına eklerkende filesystemde klasör oluştur. bu şekilde sürekli filesystemi dinlemek zorunda kalmazsın.
          Amacın sadece klasörleri listelemek ise veri tabanı kullanmana gerek yok glob fonksiyonun kullanarak direk klasörleri listeleyebilirsin.

  • txt dosyasına html sayfasından post ederek yazdırıyorum..bu yazma işlemi her post ettiğimde sayfanın en üstüne yazdıracak.yani her post edilen cümle sayfanın üstünde ondan önce post edilenler hep altta kalacak..tıpkı whatsapp iletisindeki gibi..teşekkürler.

  • Formadan gönderilen veri ile bir dosya oluşturuyoruz ama bu dosyanın ismini değişkenden alsın uzantısı da php yapsın istiyorum. Bunu touch() fonksiyonu ile yapıyorum ama dosya ismini değişkenden aldığı için uzantı ekleyemiyorum… Nasıl yapabilirim?
    Teşekkürler..

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?