Posted in PHP

PHP ile Dosya İşlemleri


Daha öncede belirttiğim gibi PHP, C programlama dili ile birçok benzerlik göstermesine rağmen dosya işlemleri gibi uğraştırıcı işlemlerde programcıya büyük kolaylıklar sağlar. PHP’de dosyalar ile kullanılabilecek birçok işlev olmasına rağmen (altmıştan fazla!) burada sadece dosya ve dizin açma, dosyadan ve dizinden okuma ve dosyaya bilgi yazma gibi konulara değineceğim.
fopen() işlevi
fopen() işlevi PHP’de dosyaları açmak için kullanılır. İşleve parametre olarak iki değer girilir. Birincisi, dosya adı ve ikinci de üzerinde işlem yapılacak dosyanın hangi işlem için kullanılacağıdır.
<? fopen(“dosya_adı”, ”amaç”); ?>
İşlevin kullanımı yukarıdaki kalıba göredir. “dosya_adı” ile belirtilen yere üzerinde işlem yapılacak dosya tam yolu ile yazılmalıdır, “amaç” kısmına ise dosyanın açılacağı kip yazılır.

Kip Kullanım Amacı
r Dosya sadece okuma için açılır. İmleç dosyanın başında konumlanır.
r+ Dosya hem yazma hem okuma için açılır. İmleç dosyanın başında konumlanır.
w Dosya yazma için açılır. Eğer aynı isimli dosya varsa silinir ve yeniden oluşturulur.
w+ Dosya hem yazma hem okuma için açılır. Eğer aynı isimli dosya varsa silinir ve yeniden oluşturulur.
a Dosya sadece yazma için açılır. İmleç dosyanın sonuna konumlandırılır. Dosya yoksa oluşturulur.
a+ Dosya hem yazma hem okuma için açılır. İmleç dosyanın sonuna konumlanır. Dosya yoksa oluşturulur.

Yukarıdaki tablo fopen() işlevi ile birlikte kullanabileceğimiz dosya açma kipi parametreleridir.
<?
#################
# dosya_ac.php #
#################
$dosya_ac = (fopen(“./dosya.txt”, ”r”));
if ($dosya_ac)
{
echo “Dosya başarı ile açıldı ”;
if (fclose($dosya_ac))
{
echo “ve kapatıldı.”;
}
else
{

echo “fakat kapatırken hata oluştu!”;
}
}
else
{
echo “Dosyayı açmaya çalışırken bir hata oluştu!”;
}
?>
Yukarıdaki PHP dosyası dosyanın açılıp açılamamasına göre ekrana bir mesaj verecektir. Açılan bir dosyayı kapatmak için fclose() işlevi kullanılır.
Yukarıdaki örnekte ilk if deyiminin içerisinde başka bir if deyimi kullandım. Bir dosyayı açıp tekrar kapatırken karşılaşabileceğimiz tüm ihtimalleri göz önünde bulundurmamız gerekmektedir. Mesela dosya açma işlemi başarılı bir şekilde gerçekleşmediyse PHP ekrana “Dosyayı açmaya çalışırken bir hata oluştu!” yazısını yazacaktır. Şayet dosya açma işlemi başarılı ise “Dosya başarı ile açıldı ” yazısını yazacak ve dosyanın doğru bir şekilde kapatılıp kapatılamaması durumuna göre “ve kapatıldı.” veya “fakat kapatırken hata oluştu!” ifadelerinde birisini ekrana basacaktır.
fgets() ve fread() işlevleri
Bu iki işlev yazma modunda açılmış bir dosyadan bilgi almak için kullanılır. Aralarında ufak bir fark vardır. fgets() işlevi metin dosyalarında kullanılır ve dosyayı satır satır okur. fread() işlevi ise dosyayı ikili kipte (bayt bayt) okur.
<?
####################
# dosya_oku.php #
####################

$dosya = fopen(“./dosya.txt”, ”r”);
while (!feof($dosya))
{
$satir = fgets($dosya,1024);
echo “$satir<br>”;
}
fclose($dosya);
?>
Yukarıdaki PHP programı bulunduğumuz dizindeki dosya.txt adlı dosyayı okuma kipinde açıp dosyanın sonuna kadar (!feof kalıbını birazdan anlatacağım) satır satır okuma gerçekleştirir ve ekrana yazar. Dosyayı okuma işlemi bitince de dosyayı kapatıp programı sonlandırır. fgets ile kullandığım “1024” rakamı okunacak bir satırdan kaç bayt alınacağını belirtir. Aslında yukarıdaki program require() işlevi ile hemen hemen aynı işi yapar.
fputs() ve fwrite() işlevleri
Tahmin edeceğiniz gibi bu iki işlevde dosyaya bilgi yazmak için kullanılır. İkisi arasında bir fark yoktur. Yazma kipinde açılmış bir dosyaya bilgi girişi için kullanılırlar.
<?
###################
# dosya_yaz.php #
###################
$metin = ”Burada herhangi bir metin olabilir.”;
$dosya = fopen(“./defter.txt”,”w”);
fwrite($dosya,$metin);
fclose($dosya);
?>
Yukarıdaki PHP dosyası $metin adlı değişkendeki bilgiyi $dosya ile belirtilen dosyaya yazacaktır. Bu işlem sırasında bulunduğumuz dizinde defter.txt adlı bir dosya varsa silinecek ve yeniden oluşturulacaktır. Eğer varolan dosyamıza ekleme yapmak istiyorsak kullanmamız gereken dosya açma komutu fopen(“./defter.txt”,”a”) şeklinde olmalıdır. Ekleme dosya sonunu yapılır.
feof
Bir dosyanın sonunun gelip gelmediğini kontrol eder. Daha önceki örneklerimden birinde kullanmıştım.
while (!feof($dosya)) ……
Oradaki kullanım DEĞİL mantıksal işleçi ile olduğu için kullandığım while döngüsünde dosya sonu olmayana kadar koşul doğru kabul edilip döngü sürdürülecektir.
PHP ile Dizin İşlemleri
opendir() işlevi
Adında da anlaşılacağı gibi bu işlev kendine parametre olarak verilen dizini açmak için kullanılır. Bulunduğumuz dizindeki “resimler” alt dizinini açmak için
opendir(”./resimler”);
gibi bir ifade kullanırız.
readdir() işlevi
Bu işlev ise açık olan bir dizinde okuma yapmamıza olanak sağlar. Yine bulunduğumuz dizindeki “resimler” altdizinini okumak için
$dizi=opendir(“./resimler”);
readdir(“$dizin”);
gibi bir komut kullanırız. İsterseniz dizinler ile ilgili iki işlevi bir örnek ile açıklayalım. Bu işlevin çalışabilmesi için bulunduğumuz dizinin içinde bir “abc” dizini olmalı ve kullanıcı yetkileri 705 yada 755 şeklinde (yani herkese okuma yetkisi) olmalıdır.
<?
##################
# dizin.php #
##################

$i = 1;
$dizin_ac = opendir(“./abc”);
while ($dosya = readdir($dizin_ac))
{
echo “Bu abc dizinindeki $i. eleman : $dosya<br>”;
$i++
}

?>
Yukarıdaki PHP programı bulunduğumuz dizindeki “abc” dizinini açıp, içeriğini sıra ile ekrana basmaktadır.
ereg() ve eregi() işlevleri
ereg() ve eregi() işlevleri bir metin içerisinde verilen bir kelimeyi arar. eregi() işlevi ereg() işlevinden farklı olarak arama sırasında büyük-küçük harf ayrımı yapmaz.
Hazırladığınız bir web formunda kullanıcının doğru bir e-posta adresi girip girmediğini kontrol etmek için aşağıdaki gibi bir kod kullanabilirsiniz.
<?
################
# ereg.php #
################
if(ereg(“@”,$eposta) && ereg(“.”,$eposta))
{
echo “Kaydolduğunuz için teşekkürler!”;
}
else
{
echo “<font color=”#f80000″>Lütfen e-posta adresinizi doğru girin!</font>”;
require(“uye_kayit.html”);
}

?>
ereg_replace() ve eregi_replace işlevleri
Bu işlevler de belirtilen metin içinde istenilen bir kelimeyi bulup değiştirmek için kullanılır. Yine eregi_replace() işlevinin ereg_replace() işlevinden farkı büyük-küçük harf ayrımı yapmamasıdır.
<?
######################
# ereg_replace.php #
######################
ereg_replace(“fni18444@gantep.edu.tr”, ”yeni_adresim@sunucu.com”, $metin);
?>
Diyelim ki 10-15 sayfalık bir yazı yazdım ve bu yazı içerisinde e-posta adresimi sıkça kullandım. Yazımı yazdıktan bir süre sonra e-posta adresim değişti. İşte yukarıdaki kod ile önceden yazdığım yazı içerisindeki eski adresimi yenisi ile değiştirebilirim.
md5() işlevi
md5() şifreleme için kullanılan bir işlevdir. İşleve parametre olarak verilen metnin uzunluğu ne kadar olursa olsun işlev bu metni 32bit ile şifreler ve geri dönüşümü yoktur. Yani md5 ile şifrelenmiş bir metni tekrar eski haline getirmek olanaksızdır (en azından şimdilik ;)). Peki bu ne işimize yarayacak? Karşılaştırma yaparken, mesela md5 ile şifrelenip veritabanına kaydedilmiş bir şifreyi kontrol etmek için, kullanıcıdan gelen şifreyi de md5 ile şifreleyip karşılaştırma yapmanız yeterli olacaktır. Md5 hakkında daha ayrıntılı bilgi için internette herhangi bir arama motorundan “RFC1321” aratmanız yeterli olacaktır.
unlink() işlevi
Bu işlev kendisine parametre olarak girilen dosyayı silmek için kullanılır. Kullanımı unlink(“dosya_adı”) şeklindedir.
mkdir() ve rmdir() işlevleri
Bu iki işlev de dizin oluşturma ve silme için kullanılır. mkdir() kendisine parametre olarak verilen bir dizini oluşturur ve rmdir() ise kendisine parametre olarak verilen dizini siler.
Tabii buraya kadar anlattığım dizin ve dosya işlemlerini gerçekleştirebilmeniz için o dosya ve dizin üzerinde kullanım hakkına sahip olmanız gerekmektedir. Aksi taktirde dosyaya ulaşımda sorun olduğuna dair bir hata mesajı ile karşılaşırsınız. İnternet’teki bir sunucudan istekte bulunan bir kullanıcı sunucu sistem tarafında “diğer” kullanıcı grubuna dahil edilir. Dosya erişim yetkileri bu özellik göz önünde bulundurularak ayarlanmalıdır.

Müəllif:

Graphic Designer

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

%s qoşulma