7 Mayıs 2012 Pazartesi

PHP'de Dosyaları Yönetmek


Dosya(file) işlemleri, programlama açısından son derece önemlidir. Söz konusu programlama dili web tabanlı ise, bu önem daha da artmaktadır. Çünkü web tabanlı sistemler, kullanıcı odaklıdır ve dosya transfer trafiği oldukça fazladır. Bu sebeple dosyalarla ilgili işlemler için çok çeşitli ve güçlü bir kütüphane bulunması gerekmektedir. Bu yazıda PHP dilini bu kütüphanesine ve dosya işlemlerine değineceğiz.

include() Komutu

Harici bir dosyayı, başka bir dosya içinde çalıştırmak üzere çağırmak amaçlı kullanılan fonksiyondur. include() komutu ciddi ve büyük sistemler üzerinde yapılan çalışmalarda, mükemmel bir kolaylık ve dinamizm kazandırmaktadır. En önemli etkilerinden biri, sayfaların güncellenmesi sırasında gözlemlenebilir. Örneğin bir sayfanın yazı tipinde değişme yapılacak ise, include edilen sayfadaki değişim, bu dosyanın include edildiği tüm sayfalarda etkisini gösterecek ve böylece her sayfanın tek tek güncellenmesi işleminin zahmetinden kurtulmuş olunacaktır.

Bir internet sayfasının içinde HTML, JavaScript, CSS, PHP, SQL, ASP gibi birçok kodlama bulunabilir. Bu da kod yığını demektir ki çok sıradan bir internet sitesinin bile kaynak kodları incelendiğinde yüzlerce satır koddan oluştuğu rahatlıkla görülebilir. Durum böyle iken include() komutu daha da önem kazanmaktadır.

Çağırılmak istenen dosyalar genelde .inc formatında dosyalar olur ve sayfanın kendisinde yazılacak bilgilerin aslı, bu dosyada aynen mevcut olmak zorundadır.

Dikkat edilmesi gereken konu, include() yöntemiyle entegre edilen dosyanın içinde PHP kodlaması yapılması gerekiyorsa, <?php ?> etiketleri arasına, ASP yapılması gerekiyor ise de <% %> etiketleri arasına yazılmasına dikkat edilmesidir. Yani, hangi programlama dili ise kurallara uygun şekilde yazılma zorunluluğu vardır. include() komutunun görevinin, kod yığını oluşmasına engel olmak ve sistematik bir kod düzeni oluşturmak olduğu unutulmamalıdır.
Aşağıdaki kodları css.inc dosya adıyla kaydedelim.

css.inc

<style type="text/css">
<!--
A.style4 {
            font-size: 12px;
            font-family: Arial, tahoma;
            text-decoration:none;
            color: #0F4297;
}
A.style4:hover {
            font-size: 12px;
            font-family: Arial, tahoma;
            text-decoration:underline;
            color: #000000;
}
.style5 {font-size: 12}
-->
</style>

Yukarıda görülen kodlar, tipik bir css formatlı CSS dosyasıdır.

Aşağıdaki kodları meta.inc dosya adıyla kaydedelim.

meta.inc

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9">
<meta name="keywords" content="Php, Asp, Html, Css, Mysql, Sql, Javascript, xml, ajax"/>


Aşağıdaki dosyayı index.php olarak kaydedelim.

index.php

<html>
<head>
<title>Phpservisi.com | AÇIK KAYNAK KOD PLATFORMU
</title>
<?php include("css.inc"); ?>
<?php include("meta.inc"); ?>
</head>
<body>
<!-- Site İçerik-->
</body>
</html>


Görüldüğü gibi bir internet sayfası ve içerisinde include() yöntemi uygulanmaktadır.

meta.inc ya da css.inc dosyalarında yapılan değişiklik, otomatik olarak index.php sayfasında da etki edecektir. Böylece bir yerde yapılan güncelleme, bütün sisteme entegre olmaktadır.


include() İfadesini Koşullu Kontrol Yapıları İçinde Kullanmak

include() deyiminin harici bir dosyayı, diğer bir dosya içinde çağırmak işleminde kullanıldığına değinmiştik. Fakat bu çağırma işleminin bazen belirli koşullar oluştuktan sonra olması istenebilir.

Örneğin, sadece log-in işlemi gerçekleştikten sonra görüntülenebilecek bir sayfa olduğunu farz edelim. session(oturum) açıldığında include işlemi başlasın isteyelim.

Oturum açma koşuluna göre çağırılan dosya

<?php session_start(); ?>
<?php
//Deneme oturumu açılış değeri true(1) ise
if(session_is_registered("deneme")==1) {
include("islem.php"); //Kriter->islem.php dosyasının include edilmesi
}
?>

Yukarıdaki uygulama, oturum açılma işlemi gerçekleşmesi koşulunda, islem.php isimli dosyayı include ifadesi ile çağırma işlemini göstermektedir.


include_path() Yönergesi

Hazırlanan büyük çaplı bir projenin, dosyalarını taşımak ya da başka bir bölüme kaldırmak gerekebilir. Bu durumda, program içinde include ile çağırılan belki de binlerce dosyanın da yol adresi değişmiş olacaktır. Bu durumda sıfırdan kod yazmaktan daha zahmetli bir iş karşımıza çıkacaktır.

Durum böyle iken include_path yöntemi kullanılarak fayda sağlanabilir.

php.ini dosyasının include_path yönergesi ayarlanarak bu zarar giderilmiş olur.


include_path() yönergesi

include_path .:/users/phpservisi/htdocs/phpservisicom/lib/



include_once() İfadesi

include() ifadesinin sistem tasarlarken ne kadar büyük bir yoğunluktan kurtardığından bahsetmiştik. include() komutu kodlama içinde binlerce kez kullanılmış olabilir. Bu durumda aynı dosyayı çağıran iki include() ifadesi gözden kaçarak üst üste kullanılmış da olabilir. Durum böyle olunca include işlemi gerçekleşilen dosya iki defa çağırılıp yazdırılacaktır. Bu işlem bir hatadır. Bu hatadan kurtulmak için include_once() fonksiyonu oluşturulmuştur. Karmaşık bir programlama oluştururken include() ifadesi yerine include_once() fonksiyonu kullanmak bu sorunu giderecektir.


Dosya Üzerinde İşlemler

Dosya işlemleri çok büyük önem taşımaktadır. Çünkü yapılan herşey, aslında kodlardan oluşmaktadır ve kodlar da dosyaların içinde yer almaktadır. Böyle bir durum söz konusuyken dosyaların durumları ve işlevleri hakkında, programcının bilgisi edinebilecek bir sistem gereklidir.

Dosyalar ile ilgili olarak şu maddeleri sıralayabiliriz:

  • Dosya bilgileri,
  • Dosya yaratmak ve yok etmek,
  • Dosya üzerinde işlem yapmak (yazmak, temizlemek, okumak),
  • Dosya üzerinde yapılabilecek diğer işlemler,
  • Dosya yükleme işlemleri,
  • Dizin İşlemleri


Dosyalara Ait Bilgileri Edinme Yöntem ve Fonksiyonları : is_readable(), is_executable(), is_writeable()

Dosyalara ait bilgiler, oldukça önemli bir konudur. Zira dosyalar olmasa sistemler oluşamazdı. Örneğin bir arkadaşlık portalında, bir kullanıcı profil resmini değiştirmek istediğinde bir resim yüklemesi gerekmektedir. Eklediği resim server üzerinde bir dosya(klasör) içine konmaktadır. Eklenen bu resmin, o dosya içine yüklenebilmesi için o dosyanın yazılabilir olması gerekmektedir(chmod 777). Bütün bunların gerçekleşebilmesi için birtakım fonksiyonlar kullanılmaktadır. Bu bölümde bu fonksiyonlar üzerinde duracağız.


is_readable();

Fonksiyon adından da belli olduğu üzere, is_readable fonksiyonu, bir dosyanın okunurluğu üzerinde araştırma yapar.

is_readable() yapısı

if(is_readable("deneme.txt")) {
            //okunabilir olduktan sonra yapılması istenen kriter.
}



is_executable();

is_executetable() fonksiyonu varolan dosyayı, server (sunucu) özellikleri doğrultusunda dosya izinlerine ya da dosyanın uzantısına bağlı olarak çalışıp çalışmayacağını araştırır ve sonucu Boolean olarak döndürür.


is_writable();

is_writable() fonksiyonu, yine adında görüldüğü gibi, bir dosyanın yazılabilir olup olmadığı hakkında bilgi vermektedir. Unix alt yapılı sistemde, dosyayı görebiliriz fakat üzerinde işlem yapmak için bazı hakların önceden tanınmış olması gerekmektedir ( CHMOD ).



İrdeleme Köşesi

Chmod ifadesi, doğrudan PHP ile alakalı değildir. Unix tabanlı sistemler için geçerli bir ifadedir. PHP programlama dili de unix tabanlı bir yazılım dili olduğundan dolayı CHMOD ifadesine değinmenin yararlı olabileceğini söyleyebiliriz

CHMOD kelimesi ingilizce "change mode" kelimelerinin harflerinin uyarlanmasından meydana gelmiştir. Türkçe "türünü değiştirme" anlamına gelir. Sonraki konularda geniş olarak detay gösterilecektir.



Dosya Oluşturmak ve Silmek İşlemleri : touch(), unlink()

           
Bir dosya oluşturmak için server içine girmek gerekmez. Kodlarla oluşturmak mümkündür. touch() fonksiyonu bu amaçla oluşturulmuştur. Oluşturulmak istenen dosya adıyla kayıtlı başka bir dosya varsa hata alınmaz. Fakat bu dosyanın oluşturulma tarihi güncellenmiş olur.
           
Var olan bir dosya silinmek istenirse, yapılacak işlem touch() dosya oluşturma fonksiyonunda yapılanlarla aynı paralelde olacaktır. unlink() fonksiyonu dosyayı silmeyi sağlar.

unlink() fonksiyon gösterimi

touch(“ornekler/ornek1.php”);
unlink(“ornekler/ornek1.php”);
// ornekler klasörü altında ornek1.php isimli dosya silindi.

Dosyalara Yazma, Ekleme ve Okuma İşlemleri :  fopen()

Son yıllarda fazlasıyla gelişen internet teknolojileri, eskiden olduğu gibi sunucu taraflı değil kullanıcı taraflı bilgilere ihtiyaç duymaktadır. On sene önceki bir dönemden bahsedersek, internet sitelerinde yayınlanan bilgiler yeterliydi. Fakat hızla gelişen bu internet çağında, kullanıcıların yayınladığı bilgiler daha önem arz etti. Bundan dolayı PHP, ASP, JSP, ASP.NET gibi programlama dillerinin önemi arttı. Zira bu yazılım dilleri web tabanlı dillerdi ve verileri depolamak için köprü vazifesi görüyorlardı.

Verilerin depolandığı yerler veritabanları ya da dosyalardır. Veritabanları( MYSQL, Access, Oracle, vs.) büyük kapsamlı olmaları açısından önemlidir fakat bunlardan önce, veri depolama başlığı altında gösterilebilecek en küçük kapsamlı olan, dosyalar üzerinde işlemler konusuna değinmek gerekmektedir.


Dosyalara Yazmak : fopen(), fwrite(), fputs()

Metin dosyalarına yazma işlemi yapmak çok gelişmiş bir yöntemdir.  Bu yöntem içinde değişik parametreler vardır. Uygulanan bu parametrelerin her biri farklı görevler üstlenir.

Dosya İşlem Parametreleri
Parametre
Komut
r
Dosya okumak için kullanılır.
r+
Dosya okumak ve yazmak için kullanılır.
w
Dosya yazmak için kullanılır. Dosya yoksa yaratır. Varsa günceller.
w+
w komutu ile aynıdır. Ayrıca dosyaları okuyabilir.
a
Dosya okumak için kullanılır. Dosya yoksa yaratır. Varsa dosya içeriğine eklenti yapar.
a+
a komutu ile aynıdır. Ayrıca dosyaları yazabilir.

Bir dosya üzerinde işlem yapabilmek için o dosyayı açmak gerekir. Bunun için fopen() fonksiyonuna ihtiyaç duyulacaktır.

Dosya’yı Okumak

$dosya_oku = fopen(“deneme.inc”, “r”);


Dosya’yı Yazmak

$dosya_yaz = fopen(“deneme.inc”, “w”);


Dosya’yı Eklemek

$dosya_oku = fopen(“deneme.inc”, “r”);



Dosyalardan Okumak : fopen(), fgets(), feof(), readfile()

Bir dosyayı okumak demek o dosyaya tam erişim ile mümkündür. Bunu sağlayan fonksiyon ise fgets() fonksiyonudur.

fgets() kullanımı

$dosya_oku = fopen(“deneme.txt”,”r”);
$dosya_erisim = fgets($dosya_oku, 1024);

Bu kodlamaya bakıldığında 1024 ifadesi karşımıza çıkmaktadır. Bunun anlamı 1024 byte veridir. Dosya açılacağı için belirli bir miktar belirtilmelidir. fgtes() fonksiyonuyla okunan dosyanın içerisinde satırlar mevcut olacaktır.

Bu satırlar sonlandığı zaman bunu bildirmesi gereken bir fonksiyon gerekir ki bu da feof() fonksiyonudur. Satır sonuna ulaşıldığında TRUE ya da FALSE değerler döndürür.

feof() kullanımı

<?php
$dosya_oku = fopen(“deneme.txt”,”r”);
$dosya_erisim = fgets($dosya_oku, 1024);
feof($dosya_erisim);
?>

Dosya içeriğini okumak için farklı yollar vardır. PHP kütüphanesi bu açıdan oldukça geniştir. Şimdi Bir text dosyası yaratalım ve içeriğini ekrana yazdıralım.

deneme.txt adında bir text dosyası oluşturalım:

deneme.txt dosyası
Oluşturduğumuz bu dosyayı ekrana yazdırmak için bir php programı yazmamız gerekmektedir.

Dosya okuma

<?php
$dosya = "deneme.txt";
$sonuc = file($dosya);
foreach($sonuc as $inceleme) {
            echo $inceleme;
}
?>


Yukarıdaki uygulama çalıştırılıp ekran görüntüsü alındığında, deneme.txt dosyasındaki içerik görülecektir.

dosyaokuma.php dosyası ekran görüntüsü
Yukarıdaki uygulama, oluşturulan bir text dosyasının içeriğini okuma işlemini göstermektedir. PHP programlama dilinin bu açıdan çok geniş bir kod kütüphanesine sahip olduğuna değinmiştik. Yukarıda yapılan işlem farklı metodlarla da yapılabilmektedir.

Dosya okuma

<?php
$dosya = "deneme.txt";
readfile($dosya);
?>


Yukarıdaki program çalıştırılırsa, yukarıdaki görüntü elde edilecektir.

Dosyaları Kilitlemek : flock()

Bir dosya üzerinde işlem yapmak tek bir kullanıcı için geçerli değildir. Bir dosyanın birden fazla yetkili kullanıcısı olabilir. Bu kullanıcılar, dosya üzerinde aynı anda farklı işlemler de yapıyor olabilir. Bu durumda dosyanın çalışma akışı bozulacaktır. Sorun olabilecek bu durumun önüne geçebilmek için dosya kilitleme sistemini devreye sokmak gerekmektedir. Dosyaları kilitleyip herhangi bir sorun olmasını engelleyen fonksiyon flock() fonksiyonudur.

Kilitlenen dosyanın kilitten kurtulması için fclose() fonksiyonu kullanılır.


Dosyaları Kapatmak : fclose()

Bir dosya üzerinde işlem yapıldıktan sonra o dosyanın kapatılması gerekmektedir. Bunu sağlayan fonksiyon da fclose() fonksiyonudur.

fclose() kullanımı

<?php
$dosya = fopen('dosyam.txt', 'r');
fclose($dosya);
?>



Dosya Kopyalamak : copy()

Bir dosya başka bir dosya üzerine kopyalanmak istendiği zaman, copy() fonksiyonu kullanılmaktadır.
fclose() kullanımı

copy(“dosya1.txt”, “dosya_yeni.txt”);



Bir Dosya’nın Olup Olmadığını Kontrol Etmek : file_exists()

Bu fonksiyon bir dosya veya dizinin mevcut olup olmadığını araştırır. Sonucu TRUE ya da FALSE döndürür.

file_exists() kullanımı

<?php
$dosya_yol_adresi = “dosya/dosya.php”;
file_exists($dosya_yol_adresi);
?>



Dosya’nın Son Erişim Zamanına Ait Bilgiler : fileatime()

Bir dosya’ya en son erişilen zamanı döndürür. Sonuç TRUE ya da FALSE olarak döndürülür.


Yüklemesi Yapılan Bir Dosyanın Taşınacağı Hedef Klasörü Belirlemek : move_uploaded_file()

HTTP_POST metodu ile yüklemesi yapılan bir dosyayı hedef klasöre taşımak için move_uploaded_file() fonksiyonu kullanılmaktadır.

move_uploaded_file() kullanımı

<?php
$file_temp = $_FILES["file"]["tmp_name"];
$yol = “dosya/dosya.php”;
move_uploaded_file($file_temp, "$yol")
?>



Bir Dosyanın İsim Bilgisini Değiştirmek : rename()

Belirtilen dosyanın adını değiştirmek için rename() fonksiyonu kullanılmaktadır.

rename() kullanımı

<?php
rename($eski_adres, $yeni_adres);
?>



Sorgulanan Olayın Dosya Olup Olmadığını Araştırmak : is_file();

Bir dosyanın dosya olduğunu doğrulama ve kontrol etme işlevini gören fonksiyon is_file() fonksiyonudur. is_file() fonksiyonu dosya yolunun varlığını sorgular ve sonucu true ya da false döndürür.

is_file() fonksiyonu

<?php
if(is_file("deneme.txt")){
            echo "deneme.txt dosyası mevcuttur.";
}
?>



Dosya Yükleme İşlemleri

PHP web tabanlı bir programlama dili olmasından dolayı internet kullanıcılarıyla bire-bir etkileşim halindedir. Bu durum, kullanıcıların da işlem yapabilmesi anlamına gelir. İnternet, kullanıcı odaklı olan bir platform olarak düşünüldüğünde, bu platformu form alanlarından oluşturmak kaçınılmaz olacaktır. Form alanları her zaman text verileri taşımak için kullanılmaz. Bunun dışında, dosya(image dosyası, kurulum dosyası, ses dosyası vb..) taşımak ve yüklemek için kullanılır. Böyle bir durumun varlığında kullanılacak olan işlem, dosya yükleme işlemidir.

Yüklenen dosya, o dosya ile birlikte eklenen bilgilerin beraberinde kaydedilir ve bu da $_FILES süper globalinde depolanan bir dizi veri akışı ile gerçekleşir.

Dosya Yükleme Fonksiyonları
Bilgi Akışı
Bilgi
$_FILES['dosya']['name']
Yüklenen dosyanın gerçek ismi
$_FILES['dosya']['tmp_name']
Yükleme sırasında veri depolanan geçici klasör yolu
$_FILES['dosya']['size']
Yüklenen dosyanın byte bazında boyutu
$_FILES['dosya']['type']
Yüklenen dosyanın veri tipi

Terimlerin anlamlarını şu şekilde özetleyebiliriz:

  • ['name'] terimi, dosyanın orjinal ismini belirtir (Örnek: adsiz.jpg).
  • ['tmp_name'] terimi, yükleme yapılacak adresi belirtir (Örnek: resimler/).
  • ['size'] , dosyanın boyutunu gösterir (Örnek: 200KB).
  • ['type'] , dosyanın yapısını irdeler, veri tipi hakkında bilgi verir (Örnek:.jpeg).


Yükleme Formu Oluşturmak
           
Yükleme formunu oluşturmak için öncelikle bir form oluşturmak gerekmektedir. Zira veri aktarma işlemi için form alanlarına ihtiyacımız olacaktır. Dosya yükleme işleminde HTML formları, ENCTYPE argümanını içermelidir.

Yükleme Formu Görüntüsü

ENCTYPE="multipart/form-data"


Aşağıdaki kodları form.html dosya adıyla kaydedelim.

form.html

<html>
<body>
<h3>Dosya Yükleme</h3>
Bir dosya seçiniz:
<br/>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" size="50">
<br/>
<input type="submit" value="Dosya Yükle">
</form>
</body>
</html>


Görüldüğü gibi enctype="multipart/form-data" terimi form bilgilerinde belirtilmiştir. Buton'a basıldığında, upload.php sayfasında dosya yükleme işlemi yapılmış olacaktır.

form.html ekran görüntüsü
Aşağıdaki kodları upload.php dosya adıyla kaydedelim.

upload.php

<?php
if($file_name !="") {
copy ("$file", "$file_name")
         or die("Dosya Yüklenemedi!");
}
else {
 die("Dosya Bulunamadı!");
 }
?>

<html>
<body><h3>Dosya Başarıyla Yüklendi...</h3>
<ul>
<li>Gönderilen Dosya: <?php echo "$file_name"; ?>
<li>Boyut:  <?php echo "$file_size"; ?> byte
<li>Dosya Tipi: <?php echo "$file_type"; ?>
</ul>
<a href="<?php echo "$file_name" ?>">
Dosya'yı görmek için tıklayınız..</a>
</body>
</html>


copy ("$file", "/upload/$file_name") komutunda belirtilen yol adresi, dosyanın yüklemesinin yapılacağı adrestir ve belirtilmez ise yükleme işlemi gerçekleştirilemeyecektir.

Upload.php ekran görüntüsü

İrdeleme Köşesi

Dosya yükleme işlemlerinde unutulmaması gereken en önemli konu, dosyanın yüklenileceği klasörün chmod 777 ayarının yapılması gerektiğidir.
Çünkü klasör içerisinde işlem yapılacaktır. Bu sebeple bütün izinler verilmeli, erişim kısıtlandırılmamalıdır.



Dizin Fonksiyonları

Bundan önceki konularda dosyalar ile çalışma şekilleri ve bunları sağlayan fonksiyonları öğrenmiştik. Dosyaların dizinlerle ortak bir çalışma içerisinde olduğundan bahsetmiştik. PHP programlama dili, bu konuda bizlere bazı fonksiyonlar sunmaktadır. Bu bölümde bazı dizin fonksiyonlarına değinilecektir.


Sorgulanan İfadenin Dizin Olup Olmadığını Sorgulamak : is_dir();

is_dir() fonksiyonu, kullanış amacı açısından is_file() ile benzerlik gösterir. Fakat, is_file() fonksiyonunun aksine bir dizinin varlığını sorgular.

is_dir() fonksiyonu

<?php
if(is_dir("/tmp")) {
            echo "Dizin varlığı doğrulandı.";
}
?>



Belirtilen Dizindeki Kullanılabilir Alanı Sorgulama : disk_free_space();

Belirtilen bir dizin içerisindeki kullanılabilecek bölümün bayt cinsinden değerini döndürmek için disk_free_space() fonksiyonu kullanılmaktadır.

disk_free_space() fonksiyonu

disk_free_space("C:");



Belirtilen Dizinin Bulunduğu Disk Bölümünün Toplam Alanını Sorgulama : disk_total_space();

Belirtilen bir dizin içerisindeki bütün alanın bayt cinsinden değerini döndürmek için disk_total_space() fonksiyonu kullanılmaktadır.

disk_total_space() fonksiyonu

disk_free_space("C:");



Belirtilen Adres Üzerinde Bir Dizin Oluşturmak : mkdir();

Yolu belirtilmiş bir adres üzerinde dizin oluşturmak için mkdir() fonksiyonu kullanılmaktadır.

mkdir() fonksiyonu

mkdir("/klasor/klasor2/dosya", 0777);


Görüldüğü gibi, klasor/klasor2/dosya şeklinde bir yol oluşturuldu ve chmod 777 (tüm yetkiler atandı) olarak ayarlandı.


Dizin Silmek : rmdir();

rmdir() fonksiyonu parametre ile belirtilen dizini yok eder.

rmdir() fonksiyonu

<?php
//Dizin oluştur.
mkdir("/klasor/klasor2/dosya", 0777);

//Dizin yok et.
rmdir("/klasor/klasor2/dosya”);
?>


mkdir() fonksiyonu ile oluşturduğumuz dizin, rmdir() fonksiyonu ile silinmiştir.


Bir Dizini Açmak : opendir();

Belirtilen bir dizin, mevcut olup olmadığına bakılmak suretiyle opendir() fonksiyonu yardımıyla okunmak için açılmaktadır. Sonuç TRUE ya da FALSE döndürülmektedir.

opendir() fonksiyonu

<?php
//Belirtilen dizin açılıp okundu.
opendir("/klasor/klasor2/dosya”);
?>


CHMOD Kavramı

CHMOD kelime olarak İngilizce Change Mode kelimesinin harflerinden gelmektedir. Türkçe ’de Türünü Değiştirmek olarak adlandırmak yanlış olmayacaktır.

CHMOD kavramı aslında UNIX işletim sisteminde bulunan bir komuttur ve dosyaların niteliklerini değiştirmeye yardımcı olur. Windows ya da başka bir işletim sisteminde kurulu PHP server’a sahipseniz, chmod ayarı yapabileceğiniz bir platform olmayacaktır. Ancak FTP üzerinden dosya transferi yaparken chmod kavramı karşınıza çıkacaktır.

Chmod İzin Grupları

Chmod başlıca şu izinleri uygulamaktadır:

  • Okuma izni,
  • Yazma izni,
  • Çalıştırma izni

Okuma İzni : READ

Eğer bir dosyanın okuma izni varsa, dosyanın içeriği ve içerdiği dosyalar dizinlenebilir.

Yazma İzni : WRITE

Yazma iznine sahip bir dosyanın içeriğine içerik eklenebilir, silinebilir veya içerisine transfer yapılabilir.

Çalıştırma İzni : EXECUTE

Çalıştırma izni olan bir dosya, adından da anlaşılacağı gibi, çalıştırılabilir.

Chmod 777(tüm izinler atanmış) olan bir dosyanın görüntüsü
Chmod ayarları farklı numaralardan oluşur ve her birinin farklı anlamları vardır.

  • Dosya ’ya erişim izni yoktur.
  • Dosya ’yı çalıştırma izni vardır.
  • Dosya ’ya yazma izni vardır.
  • Dosya ’yı okuma izni vardır.
Chmod 777 ayarı, bir dosyaya ya da dosya ile bağlantılı bütün dizinlere verilebilecek izinlerdir. Chmod 777 olarak belirlenen bir dosyanın, okuma, yazma ve çalıştırma izni vardır. Aslında 777 ifadesi doğru değildir. Çünkü bu değerin sekizlik bir değer olduğunu varsayılmaktadır ve başına 0 alması gerekmektedir (0777, 0755, vs).

  • Dosya yüklemesi (upload işlemi) yapmak istenilen dosyanın chmod ayarı 777 olmalıdır.
  • Anket bilgilerinin depolandığı text dosyasının ya da veritabanı olarak kullanılan herhangi bir dosyanın chmod ayarı 777 olmalıdır.
  • Sistem istatistiklerinin depolandığı log’ların chmod ayarı 777 olmalıdır.
Chmod Ayarları

Rakam


Özellik

0
Erişim yok
1
Çalıştırma izni
2
Yazma izni
3
Yazma ve çalıştırma izni
4
Okuma izni
5
Okuma ve çalıştırma izni
6
Okuma ve yazma izni
7
Okuma, yazma ve çalıştırma izni

0777 ifadesindeki rakamlar sırasıyla 0, 7, 7, 7 ‘dir. Buradaki rakamların anlamları şu şekilde ifade edilebilir.

·         0 Sekizlik sistemde konulması gerekmektedir
·         7 Kullanıcı
·         7 Grup
·         7 Diğer kullanıcı ya da gruplar
  
FTP üzerinden bir dosya için izin ayarları yapmak istersek aşağıdaki gibi bir görüntüyle karşılaşırız.

Chmod ayarı 756 olan bir dosya örneği
Yukarıda görüldüğü gibi, bir dosyanın erişim hakkı her zaman aynı olmaz. Chmod 756 olan bir dosya görülmektedir. Bu dosyanın yazma hakkına bir kısıtlama getirilmiştir ve 756 izni olarak görülmektedir.


Bir sonraki yazıda görüşmek üzere!

Hiç yorum yok:

Yorum Gönder