PHP Dosya İşlemleri -1-
Hepinize merhaba dostlarım :). Bu yazımda sizlere php programlama dilinde özellikle büyük projelerde karşımıza çıkan, benim de zaman zaman kullanmış olduğum yapı olan dosya sistemlerinden bahsedeceğim. Kullanmamız her projede zorunlu mu diye soracak olursanız hayır değil derim. Çünkü yazdığınız her sistemde kullanıcıdan dosya alma zorunluluğumuz vs olmaz. Ne zaman kullanılır diye soracak olursanız ben size ufak bir örnek vereyim. Ofisiniz var varsayalım (inşaAllah sizlere nasip olur dostlarım) ve bu ofisinizde ekibiniz ve size özel bir yazılım yaptınız varsayalım. Kullanıcılar yaptıkları dosyayı yüklemek, silmek ve site üzerinden içeriğini görüntülemek istiyorlar, hatta sistem üzerinden dosya oluşturmak bile istediklerini düşünelim. İşte dostlarım bu ve bunun gibi zamanlarda php programlama dilinin bizim imdadımıza yetişen dosya sistemi fonksiyonları bize yardımcı olur. Heyecanlandığınızın farkındayım o halde sözü daha fazla uzatmadan hemen konuya girişimizi yapalım :)
chmod() Fonksiyonu
Eveeet artık yavaştan yavaştan php programlama dilinde dosya sistemi işlemlerine yavaştan yavaştan girmiş bulunmaktayız :). Şimdi gelelim bu chmod() fonksiyonumuz nedir ve ne işe yarar ona bakalım
Chmod fonksiyonumuz ingilizce Chande Mood cümlesinden türetilmiş olup bizim dosyamızın üzerinde mod değişikliği yapmamıza yarar dostlarım. nedir bbu mod değişikliği diye soracak olursanız size şöye ufak bir özet geçeyim. Özellikle ubuntu veya macOS kullanan kişilerin çok sık karşılaştığı ve dosya okuma,yazma ve çalıştırma durumlarıdır. Bu sistemlerde çalışanlar bilirler bunların özel komutları vardır :). Ben de bu komutlara kısaca değinmek istiyorum
kod | komutun işlevi |
0 | Belirtilen dosya üzerinde tüm kullanıcılardan okuma, yazma ve çalıştırma işlemini kaldırmamıza yarar |
666 | Belirtilen dosya üzerinde tüm kullanıcılara okuma ve yazma izni vermeye yarar |
755 | Belirtilen dosya üzerinde sadece dosya sahibine okuma, yazma ve çalıştırma izni vermeye yarar |
777 | Belirtilen dosya üzerinde tüm kullanıcılara okuma, yazma ve çalıştırma izni vermemize yarar |
şeklinde durum kodlarına örnek verilebilir dostlarım :). Şimdi bu kodlardan da sık kullanılanlar hakkında bilgi sahibi olduğumuza göre artık gelelim chmod() fonksiyonunun kullanımına :). chmod() fonksiyonu çalışması için iki adet parametre alır. Bunlar:
- Parametre: Modumuzu uygulayacağımız dosyamızın yolu
- Parametre: Belirtilen dosyaya vereceğimiz izin kodu (yukarıdaki tablolardaki komutlardan herhangi bir tanesi)
şeklinde iki parametre alır. Şimdi gelelim bir index.php dosyası açalım ve bu proje dosyamızın bulunduğu dizin içerisine metin.txt isminde bir metin dosyası ekleyelim. Bu işlemlere kadar tamam isek dostlarım kodlama işlemine başlayalım ve ana beraber kanca beraber misali her kullanıcıya okuma,yazma ve çalıştırma izni verelim :)
<?php
chmod("metin.txt",777);
// Ekran Çıktısı: 1 ise olumlu , 0 ise olumsuz demektir. Bize 1 sonnucu döndü
?>
şeklinde kodumuzu yazdık dostlarım :). Kodumuz çalıştığında proje dizinimiz içerisinde bulunan metin.txt isimli dosyamıza tüm kullanıcıların okuma, yazma ve çalıştırıma izninin verildiğini rahatlıkla göreceğiz :). Chmod() fonksiyonunu gördüğümüze göre dostlarım artık gelelim diğer fonksiyonumuza
dirname() Fonksiyonu
Bir diğer fonksiyonumuz olan dirname() fonksiyonumuz ise bizim belirttiğimiz dosyanın veya klasörün kök dizininin almamızda yardımcı olur. Özellikle dosya yüklerken veya dosya dizini üzerinden başka bir dosyaya erişme işlemi yapma durumumuzda bize yardım sağlar. Nasıl diye merak ediyorsanız size bir örnek vereyim dostlarım. Dosyalarınızı sistem üzerinde storage isimli bir klasör açtınız varsayalım ve bu klasör içerisinde bir dosyaya erişme ihtiyacı duydunuz. Bu durumda sizin uzun uzun dosyanın yolunu yazmak yerine dirname() fonksiyonu ile hızlıca kök dizine erişip oradan da rahatlıkla ihtiyacımıza göre dosya yoluna gitmemize olanak sağlar.
Olayın mantığını anladığımıza göre dostlarım gelelim bir index.php dosyası oluşturalım ve bu proje klasörü içerisine yukarıdaki örnekte olduğu gibi bir metin.txt dosyası açalım. Daha sonra index.php dosyası içerisinde kodlarımızı yazmaya başlayalım
<?php
echo dirname("metin.txt");
// Ekran Çıktısı: . (Yani metin.txt dosyamızın kök dizinde olduğunu belirtiyor)
?>
şekilnde kodumuzu yazdık ve metin.txt dosyası proje dizinimizin direkt olarak içerisinde olduğu için bize sonuç olarak kök dizini veriyor yani dosyamızın bulunduğu bir üst yolu. Bu da dosyamızın kök dizini olduğu için bizim ekranımıza şekilde de gösterdiğim gibi "." çıktısını verecektir. Bu fonksiyonumuza da anladığımıza göre artık gelelim diğer bir fonksiyonumuza :).
file_exists() Fonksiyonu
Dosya sistemleri konusunda neredeyse olmazsa olmaz fonksiyonlardan olan file_exists() fonksiyonu bize belirttiğimiz dosyanın gerçekten var olup olmadığını boolean bir şekilde bize döndürmeye yarar :). Kullanmamız illa zorunlu mu diye soracak olursanız size şöyle bir anlatım yapayım. Sisteminiz üzerinde bir dosya silme işlemi yapacağınızı varsayalım. Bu dosya silme işlemini yapacağımızda mantıken neyi isteriz dosya var ise sil, yok ise zaten silemezsin ortada dosya yok çünkü :). İşte bu durumda file_exists() kullanmazsak dosyayı silmek için arayacak. Peki ya silmek istediği dosya yoksa ? Bize bir hata sonucunu döndürecek ve diyecek k "Kardeşim dosyayı bulamadım :)". İşte biz de bu durumla karşılaşmamak için projelerimizde dosya gerçekten var mı yok mu bunun analizini yapmamız lazım :).
File_exists() fonksiyonumuz çalışması için bir adet parametre alır:
- Parametre: Varlığı kontrol edilecek olan dosyamız (zorunlu parametre)
Şimdi bir index.php dosyası açalım ve bu proje dosyasının bulunduğu dizine bir de metin.txt dosyası oluşturalım. Bu dosyanın varlığını kontrol ettirmek için ise gelelim index.php dosyamızın içerisine kodlarımızı yazalım
<?php
if (file_exists("metin.txt")) {
echo "Dosya Bulundu";
}else{
echo "Dosya Bulunamadı";
}
// Ekran Çıktısı: Dosya Bulundu
?>
şeklinde kodlarımızı yazdık. Projemize başlamadan önce zaten metin.txt dosyamızı oluşturduğumuz için bu dosyayı bulacak ve ekranımıza
Dosya Bulundu
çıktısını yazacaktır :). Bu fonksiyonu da anladığımıza göre dostlarım gelelim diğer dosya işlemleri fonksiyonumuza :)
filesize() Fonksiyonu
Geldik bir diğer fonksiyonumuz olan filesize() fonksiyonumuza. File Size cümlesinden yani Türkçe karşılığı olarak "Dosya Boyutu" cümlesinden türetilmiş olan bu fonksiyon bizim belirttiğimiz dosyamızın büyüklüğünü byte türünden bize döndürür. Ama burada önemli bir nokta vardır dostlarım. Bu dosya boyutunu bize döndürürken belirli limitten sonrasında hata verir. Bu limit 2GB olarak belirlenmiştir. Yani dosyamızın byte türünden bize geri dönmesini sağlayacaksak bu değerin 2GB den aşağı olmasına yani byte karşılığı 2 147 483 648 den küçük olması gerekmektedir. Şimdi sizin aklınızda bir soru var seziyorum çünkü :)
Hocam iyi güzel Allah razı olsun anlatıyorsunuz da biz bu filesize() fonksiyonunu ne zaman kullanabiliriz veya zorunlu mu ?
Çok güzel bir soru sordunuz dostlarım :). Bu fonksiyonu kullanmadan dosya işlemi gerçekleşmez diye bir kaide yok kullanmak size elbette katkı sağlayacaktır. Lakin size şöyle bir örnek vereyim. Sisteminiz var diyelim ve burada bu filesize() fonksiyonunu kullanarak boyut kuralı yazmadınız varsayalım. Ne olur biliyor musunuz zamanla. Kullanıcılar gelir 10 mb dosya da yüklemeye çalışır, 1 GB dosya da yüklemeye çalışır büyük boyutlu dosyalar da yüklemeye çalışır. Zamanla sizin sunucunuz bu yükü çekmez veya çekerse de sisteminiz çok çok yavaşlayabilir, çökebilir. İşte bu ve bunun gibi sonuçlarla karşılaşmamanız için dostlarım bu fonksiyonu kullanmanızın size faydalı olacağını söyleyebilirim :).
Şimdi gelelim bu fonksiyonumuzun alacağı parametrelere:
- Parametre: Boyutu kontrol edilecek dosyamız (zorunlu)
şeklinde bir adet zorunlu parametre alır.
Şimdi zorunlu parametreler hangisidir onlara da baktığımıza göre dostlarım gelelim artık bunu kodlamaya dökmeye :). Öncelikle bir index.php dosyası oluşturalım ve bu proje klasörünün yanına metin.txt isimli bir dosya açalım. Daha sonra metin.txt isimli dosyamızın içerisine gelip
MFSoftware Blog
Dosya İşlemleri
şeklinde yazımızı yazalım. Daha sonra gelelim index.php dosyamızın içerisinde kodlarımızı yazmaya başlayalım
<?php
echo filesize("metin.txt");
// Ekran Çıktısı: 34
?>
şeklinde kodumuzu yazdık dostlarım. Bize ekran çıktısı olarak metin.txt dosyamızın byte türünden boyutunu yani 34 çıktısını verecektir :). Şimdi gelin sizinle bir algoritma yazalım ve burada 40 byte üzeri olan dosyaların geçmesine izin vermeyelim. O halde hemen index.php dosyasında ufak bir düzenleme yapmamız lazım. Gelelim onu da yapalım
<?php
if (filesize("metin.txt")>40) {
echo "Metin dosyası 40 Byte dan Büyük::: ".filesize("metin.txt")." Byte";
}else{
echo "Metin Dosyaı 40 Byte veya 40 Byte dan Küçük::: ".filesize("metin.txt")." Byte";
}
// Ekran Çıktısı: Metin Dosyaı 40 Byte veya 40 Byte dan Küçük::: 34 Byte
?>
şeklinde kodumuzu yazdık dostlarım. Bizim metin dosyamızın boyutu 34 Byte olduğu için ve haliyle 40 Byte dan küçük olduğu için ekranımıza şekildeki gibi bir çıktı bastırılacaktır :). Bu fonksiyonu da anladığımıza göre gelelim diğer bir fonksiyonumuza :)
rename() Fonksiyonu
Dosya işlemlerinde sıklıkla kullanılan fonksiyonlardan birisi olan rename() fonksiyonuna bakacak olursak dostlarım isminden de anlaşılacağı üzere bizim dosyamızın ismini değiştirme işleminde büyük rol oynar. Nerede kullanılır diye aklınıza soru gelmiştir dostlarım hemen örnek vereyim size :). Bir projemiz olsun varsayalım ve bu projemizle ilgili sisteme dosya yükledik varsayalım. Proje isminde çok ufak bir düzenleme yapacağımızı varsayalım. Bu düzenlemeyi yaptığımızda bu projeyle ilgili olan dosyaları silip tekrar yüklemek yerine rename() fonksiyonu ile bunu rahatlıkla güncelleyebiliriz :). İşte size kullanım alanından bir örnek :). Şimdi gelelim dostlarım rename() fonksiyonunu inceleyelim.
rename() fonksiyonumuz çalışması için 2 adet zorunlu parametre alır. Bu parametreler:
- Parametre: Dosyamızın önceki ismi (zorunlu)
- Parametre: Dosyamızın yeni ismi (zorunlu)
şeklinde iki adet zorunlu parametre alır. Şimdi gelelim bir index.php dosyası açalım ve bu proje dosyamızın yanına bir de metin.txt isimli dosya açalım. Bu metin.txt dosyamızın ismini benim_metnim.txt olarak değiştirelim. Hemen proje dosyamızı açalım ve aşağıdaki gibi kodlarımızı yazalım
<?php
if (file_exists("metin.txt")) {
$islem=rename("metin.txt", "benim_metnim.txt");
if ($islem) {
echo "Dosya İsmi Güncellendi";
}else{
echo "Dosya İsmi Güncellenmesinde Hata Oluştu";
}
}else{
echo "Dosya Bulunamadı";
}
// Ekran Çıktısı: Dosya İsmi Güncellendi
?>
şeklinde kodumuzu yazdık. Öncelikle dosyamızın varlığını kontrol ettirip daha sonra da dosya ismi güncelleme işlemini yaptırdık. Güncelleme işlemi başarılı ise ekranımıza "Dosya İsmi Güncellendi", başarısız ise "Dosya İsmi Güncellenmesinde Hata Oluştu" şeklinde ekranımıza uyarı bastıracaktır. Bizim de dosyamız başarılı bir şekilde güncellendiğine göre ekranımıza şekildeki gibi "Dosya İsmi Güncellendi" uyarısı verilecektir :). Bu fonksiyonla da başarılı bir şekilde örnek yaptığımıza göre gelelim diğer bir fonksiyonumuza
unlink() Fonksiyonu
Geldik bir diğer fonksiyonumuz olan unlink() fonksiyonuna dostlarım :). Unlink fonksiyonuna bakacak olursak dosya sistemleri konusunda vazgeçilmez bir yere sahiptir. Nasıl diye aklınıza soru gelmiştir seziyorum bunu. Size bir örnekle açıklayayım:
Dosya güncelleme ve dosya silme işlemlerinde haliyle önceki dosyanın sistemimizden silinmesini isteriz. İşte bu zamanlarda unlink fonksiyonu bize yardıma koşar. Önceki dosyamızı (güncellenecek veya silinecek olan) silmeye yarar. Yani velhasıl kelam unlink fonksiyonumu bizim dosyamızı silme işleminde önemi bir rol oynar. Şimdi akıllardaki diğer soru
Nasıl Çalışır ?
güzel bir soru. :). Özellikle öğrenme sürecinde bu soruların akıllarda yer etmesi çok güzel :). Gelelim bu sorunun cevabına. Unlink() fonksiyonu çalışması için 1 adet zorunlu parametre alır. Bu ise:
- Parametre: Silinecek olan dosya (zorunlu)
şeklinde bir adet zorunlu parametre alır. Şimdi ise gelelim bu fonksiyonumuzu koda dökme işlemine :). Öncelikle bir index.php dosyası oluşturalım ve bunun yanına da metin.txt isimli bir dosya oluşturalım :). Dosyalarımızı oluşturuğumuza göre proje dosyamızda gelelim ve kodlarımızı yazmaya başlayalım
<?php
if (file_exists("metin.txt")) {
$sil = unlink("metin.txt");
if ($sil) {
echo "Dosya Silindi";
}else{
echo "Dosya Silinmesinde Hata";
}
}else{
echo "Dosya Bulunamadı";
}
// Ekran Çıktısı: Dosya Silindi
?>
şeklinde kodlarımızı yazdık dostlarım :). Öncelikle dosyamızın varlığını kontrol edip daha sonrasında da unlink() fonksiyonu ile dosyamızı sildirme işlemi yaptık. Ve en sonda da ekranımıza "Dosya Silindi" olarak yazımız bastırıldı. Dosya silme işlemini de ayarladığımıza göre artık gelelim diğer bir fonksiyonumuza :)
pathinfo() Fonksiyonu
Geldik bu konumuz için son fonksiyonumuza dostlarım :). Özellikle dosya işlemlerinde hemen hemen her zaman karşımıza çıkan bu fonksiyon bizim belirttiğimiz bir dosya hakkında bilgilerin getirilmesi işlemlerinde (bağlı olduğu kök klasörü, uzantı vs.) bize çok büyük yardımcı olur :). Zorunlu olarak 1 parametre alır :). Bu parametre ise:
- Parametre: Belirtilen dosyamızın yolu (zorunlu)
şeklinde bir adet zorunlu parametre alır. Şimdi gelelim ufak bir örnek yapalım. index.php isimli bir dosya oluşturalım ve bunun yanına metin.txt isimli bir dosya oluşturalım. Daha sonra metin.txt dosyasının içerisine aşağıdaki gibi bir örnek yazı yazalım
MFSoftware Blog
pathinfo() Fonksiyonu
şeklinde yazımızı yazdıktan sonra gelelim index.php dosyamızda gerekli ayarlamaları yapmaya. Şimdi index.php dosyamızı açalım ve aşağıdaki gibi kodlarımızı yazalım
<?php
if (file_exists("metin.txt")) {
$dosya = pathinfo("metin.txt");
echo "<pre>";
print_r($dosya);
echo "</pre>";
}else{
echo "Dosya Bulunamadı";
}
?>
şeklinde kodlarımızı yazdık dostlarım :). Bu dosyayı çalıştırıdığımızda karşımıza çıkan sonuç
Array
(
[dirname] => .
[basename] => metin.txt
[extension] => txt
[filename] => metin
)
şeklindedir. Burada dikkat ettiyseniz dosyamızın kök klasörürü, ismini, uzantısını ve dosya ismini görüyoruz. Tüm işlemler bu kadar dostlarım :).
Eveeeet bu yazımızda da php programlama dillerinde dosya işlemlerinde kullanılan fonksiyonlardan dilim döndüğünce anlatmaya çalıştım. Umarım faydalı olmuşumdur. Eksik veya hatalı bir bilgi aktarımı yapmış isem düzeltilmesi için benimle iletişime geçmekten çekinmeyin :). Başlarda biraz karmaşık veya zor gelebilir bu konu anlıyorum dostlarım öğrenme sürecinde bu şeylerin olması normaldir. Sizlerden bu noktada istediğim her yazımın altında da dediğim gibi "İstikrarlı ve Azimli Olmalı, Bolca Pratik Yapmalısınız :)". Bu dediklerimi hayat felsefeniz yaptığınız sürece başarı sizin için kaçınılmaz olacaktır :).
Hayallerinizi gerçekleştirmeniz ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim :)
Yazar Hakkında
Kendi Halinde Bir Backend Developer
Mehmet emin GÜLEL
01.04.2021Gayet güzel ve yol gösterici , bir çok eksiklerimizi gidermemizi sağlayan bilgiler blokların sonunda sosyal medyada paylaşmak için ektenti eklemeni tavsiye ederim..