Merhaba arkadaşlar. PHP ve ASP gibi dinamik sayfalar yapabileceğimiz programlama dillerinin çıkması ve giderek gelişmesiyle beraber artık sınırlar yavaş yavaş kalkıyor. Özellikle WEB 2.0 teknolojisi artık web sayfalarının normal programlardan hiç bir farkının kalmamasını sağladı. Bu yazımda da buna örnek olabilecek çok küçük ve çok basit bir konuyu ele almak istiyorum. Gerçekten bu konu yukarıda yazdığım gelişmeler düşünüldüğünde neredeyse sıfır ancak bir zamanlar web sayfalarında bunu bile yapmak bir hayaldi. Geçenlerde yaptığım bir sayfaya eklediğim dosya gönderme bölümünde giden dosyaların türlerini kontrol etmem gerekti. Buna göre kullanıcılar sadece Acrobat, Word ya da Excel boyutunda dosyalar göndrebilecekti. Bunun için dosya uzantılarının ne olduğunu bilmem gerekiyordu. PHP’de basit bir kodla sorunu hallettim ve şimdi de burada sizinle paylaşıyorum. Önce biraz koda bakalım
<? $dosya_adi="deneme.doc"; $isaret="."; $pos = strrpos($dosya_adi, $isaret); $len=strlen($dosya_adi); $fark=$len-$pos; $uzanti=substr($dosya_adi,$pos,$fark); echo $uzanti; ?>
Bu kod dosya adını sondan başlayarak nokta işaretine kadar okuyacaktır. Yani yukarıdaki kodun çıktısı .doc olacaktır. Böylece dosya formatını elde ettikten sonra bunu istediğiniz şekilde kullanabilirsiniz. Örneğin benim yaptığım gibi sadece belirli formatların gönderilmesine izin vermek ya da uzantıya göre sayfanızda o dosyayı açan temek programın simgesini göstermek gibi.
Aslında yukarıdaki örnekte uzantısı alınacak dosya bir değişkenle önceden tanımlanmış (deneme.doc) ve kodumuz bu dosyayı inceledi peki biz böyle tanımlamadan kullanamaz mıyız? Tabi ki kullanırız zaten bir nevi buna zorunluyuz. Ben incelenecek dosyayı bir file yani dosya input alanından öğreniyorum. Formun içine yerleştirilen bu eleman bir adet metin kutusu ve gözat butonundan oluşuyor. Formu gönderirken bu input alanındaki dosya alınıyor. Peki bunu nasıl yapacağız. Aşağıya bir göz atalım.
<? if ($_POST) { $dosya_adi=basename( $_FILES['file']['name']); $isaret="."; $pos = strrpos($dosya_adi, $isaret); $len=strlen($dosya_adi); $fark=$len-$pos; $uzanti=substr($dosya_adi,$pos,$fark); echo $uzanti; } ?> <form action="" method="post" enctype="multipart/form-data" name="form1"> <input type="file" name="file"> <input type="submit" name="Submit" value="Submit"> </form>
Yukarıdaki örnekte sayfamız ilk önce kendisine gönderilen bir veri yani post varmı diye kontrol ediyor ve yolsa formumuzu gösteriyor. Biz sonra bu form ile bir dosya upload etmek için submit butonuna basınca form bilgileri aynı sayfaya gönderdiği için bir post söz konusu oluyor ve kod işlemeye başlıyor formdan gelen dosyanın gerçek adını alıp bize uzantısını söylüyor.
Dikkat ederseniz daha önce $dosya_adi değişkenini tanımlarken deneme.doc demiştik ama burada aynı değişkeni basename( $_FILES[‘file’][‘name’]); satırına eşitledik ve böylece kod çalıştı. Burada $_FILES ifadesi formdaki dosya upload alanından gelen veriyi işaret eder. file upload etmek için kullandığımız inputun adıdır ve istersek bunu değiştirebiliriz ama o zaman bu değişikliği hem inputtaki name kısmına hem de kodumuzdaki bu $_FILES kısmına ve gerekirse diğer kısımlara da uygulamak gerekecekti. name ise anlayacağınız gibi input ile gelen dosyanın ismini almak için kullanılıyor. Burası için size kullansak mesela o zaman da dosya boyutunu öğrenmek için yazacağımız bir kodla dosya boyutunu öğrenecektik.
Peki bu dosyanın adı config.php.inc olsa ne olacaktı? Sonuç .inc olacakti çünkü kodumuz okumaya sondan başlıyor ver ilk noktaya kadar devam edip orada duruyor. İstesek noktayı da çıkartırız ve sadece doc, inc, jpg gibi sonuçlar elde edebiliriz ama noktanın da kalması bence daha iyi olacaktır.