PHP Dersleri

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Anarki
    Anarki's avatar
    Kayıt Tarihi: 04/Mayıs/2004
    Erkek

    PHP









     






    PHP Nedir ?

    PHP şu ana kadar gelişim sürecini en hızlı ve en sağlam şekilde tamamlayan sunucu tabanlı bir betik dilidir ve HTML içerisine gömülü olarak çalışır. Ayrıntıya girmek gerekirse PHP betik dili tamamen sunucu tarafında çalışarak istemci tarafına hiçbir yük getirmemekte ve platform bağımsız çalışabilmektedir örneğin PHP kullanılarak tasarlanan bir PHP betiği bir iMAC + Netscape üzerinde çalışacağı gibi Windows NT + Internet Explorer üzerindede çalışabilmektedir. Şu anda PHP platform olarak tüm istemci platformlarını desteklediği gibi sunucu platformu olarak da Linux + Apache web sunucusu , MS Windows NT + MS IIS , MS Windows NT + Apache web sunucusu bileşimlerini desteklemektedir. Zaten bu iki platform dünya üzerindeki tüm web sunucusu pazarının % 90 ınını kapsamaktadır.

    PHP Ne İşe Yarar ?

    Genelde bir çok web sayfasında görmeye alıştığımız formlar , kullanıcı anketleri , veritabanına bağlanıp sorgu yapma ve veri girme sayfaları ve kullanıcı ile sayfa sahibi kişi / şirket arasında salt HTML den daha interaktif bir şekilde bilgi alışverişi sağlayabilecek olan bütün projeler için PHP biçilmiş kaftandır. PHP kullanarak form oluşturup bu formu online olarak işleyebilir ve formu doldurana sonuç dönebilir , kendi kendini yaratan web sayfaları hazırlayabilir , cookie yollayıp alabilir ve HMTL içerisinde yapay zeka gerektirecek her tür işlem için kullanabilirsiniz. Günümüzde PHP nin en yaygın kullanım alanı web ve veritabanlarini etkileşimli bir şekilde kullanan elektronik ticaret ve müşteri servisleri uygulamalarıdır. PHP kendi içerisinde bir çok veritabanı sunucusuna ve veritabanına native ( türkçesi ne acaba ? ) bağlantı imkanı veren bir dildir. Desteklediği bazı veritabanları ise şunlardır :o:p>








    Adabas D
    DBase
    Empress
    FilePro
    Informix


    InterBase
    mSQL
    MySQL*
    Oracle
    PostgreSQL


    Solid
    Sybase
    Velocis
    Unix dbm
    MS SQL


    PHP sadece veritabanı bağlantısı sağlamakla kalmaz ayrıca IMAP, SNMP, NNTP , POP3 , HTTP servislerine bağlantı kurabilmek içinde destek vermektedir.
    *MySQL : Kaynak kodu yeni açık olan bir veritabanı sunucusu . PHP ile mükemmel bir uyum içerisinde çalışmakta ve bu ikili konusunda her yerde döküman bulabilmeniz mümkün.

    PHP Tarihçesi


    PHP 1994 yılında Rasmus Lerdorf tarafından web sunucusuna koyduğu CV sinin kaç kişi tarafından okunduğunu izlemek için geliştirmeye başlanmıştır. İlk başta bu versyonlar halka açık olmamakla birlikte 1995 yılında Personal Home Page Tools adı altında diğer insanların kullanımına açık hale getirilmiştir. O yıllarda içerisinde çok basit bir iki makroyu anlayabilen ufak bir derleme motoru kişisel sayfalarda kullanılmaya alışık olunan bazi gereçleri bulunduran , misafir defteri , sayaç vb uygulamaları barındıran bir araçtı. 1995 yılında derleme motoru tekrar yazılarak adına PHP/FI V2 denildi ve bu sürüm Rasmus tarafından yazılan ve HTML form bilgilerini işleyebilen bir yapıya sahipti buna mSQL desteğinide ekleyince PHP/FI tam anlamıyla doğmuş oldu. Bir çok kişinin desteği ve kendi yazdıkları kodları paylaşmaları sonucu çok hızlı bir şekilde gelişti ve 1997 de Zeev Suraski ve Andi Gutmans tarafından tamamen yeniden yazılan derleme motoru PHP V3 için bir taban oluşturdu. Bundan yaklaşık bir iki ay önce PHP V4 çıktı ve bu sürümde PHP V3 gibi sıfırdan yeniden yazıldı.

    PHP Nereden Temin Edilir ?

    PHP şu anda birçok web sunucusu üzerinden ftp kullanarak indirilebileceği gibi www.php.net <http://www.php.net> adresindende edinilebilir. <ftp://ftp.onar.com.tr/pub/linux/console/php/> ya da ODTU nun ftp sunucusundan indirmeniz daha hızlı olacaktır. Boyutu cok buyuk olmayan bu dosyalar aslında tek başlarına çok önemli olmakla beraber kullanım kılavuzlarını indirmeniz önerilir zira her zaman referans olarak kullanabilirsiniz.

    PHP Kullanacak Bir WEB Sitesi İçin Neler Gerekir ?

    Betik tabanlı dillerde hazırlanana betiğin çalışması bir çok etmene bağlıdır. PHP de ise çalışan bir sistemin 3 temel katmanı vardır :

    -    İşletim Sistemi
    -    Web Sunucusu
    -    PHP Derleme Motoru

    Görüldüğü üzere sadece PHP dosyalarını sunucu üzerine indirip kurmak yetmemektedir ( zaten web sunucusu olmadan kuramayacağınızı göreceksiniz ) , web sunucusunun kullanılacak olan .php ya da .php3 uzantılı dosyalarda PHP derleme motorunu çalıştırması gerektigini bilmek zorunda olduğu gibi dışarıdan bağlanan kullanıcının dosyaları çalıştırma ve okuma haklarının yönetimi ise işletim sistemine kalmaktadır. Bu üç katmandan herhangi birinde bir problem oluşursa web sayfası hizmet veremez .

    İşletim sistemi olarak tavsiye edilebilecek en güçlü opsyon Linux tur ( NIX türevleri ) . Şu anda kullanılan bir çok PHP ile desteklenmiş sayfa altyapı olarak Linux kullanmaktadır. Tavsiye edilebilecek dağıtım ise Redhat dir , fakat bu PHP diğer dağıtımlarda kullanılamıyor anlamına gelmez aksine tüm Linux dağıtımları üzerinde sorunsuz çalışmaktadır fakat kurulum ve kullanım kolaylığı ve yaygınlığı açısından Redhat tavsiye edilmiştir. Micro$oft kısmında ise seçenek olarak Windows NT söz konusu olacaktır fakat eğer başınızın ağrımasını , IT müdürünüzün gecenin ikisinde sizi arayip siteye ulaşılamadığını söylemesini ve sabah geldiğinizde verdiği hata mesajından hiçbirşey anlayamadığınız mavi bir ekranı görmek istemiyorsaniz bu seçeneği aklınızın köşesine bile yaklaştırmayın ancak illaki MS bağımlı bir çözüme gidecekseniz C# kullanın , unutmadan henüz Micro$oft geliştiricileri bile bu dil hakkında tam bir bilgiye sahip değiller ve eğer megabaytlarca RAM harddisk ve processor hızı size batıyorsa hemen ASP kullanmaya başlayabilirsiniz.
    İşletim sistemi ile alakalı kurulum bilgisi ve temini konusunda www.gelecek.com.tr <http://www.gelecek.com.tr> adresine bakmanızı tavsiye ederim.

    Web sunucusu kısmında ise bir çok web sunucusu olmasına rağmen sadece bir tanesi tavsiye edilebilir bir sunucu : Apache . Apache DSO mantığı güden ve PHP ile mükemmel bir uyum içinde çalışan son araştırmalara göre dünya üzerindeki web sitelerinin % 49 unda kullanılan ve en önemlisi kaynak müsrifi olmayan bir web sunucusu . Linux üstünde kurulumu ise oldukca basit ve Linux işletim sistemi ile mükemmel bir uyum içerisinde çalışan bu sunucu sanal domain tanımlama konusunda ise en çok tercih edilen alternatif. Apache nin kurulumu ve kullanımı hakkındaki ayrıntılı bilgileri www.apache.org <http://www.apache.org> adresinden edinebilirsiniz . Bu yazı dizisinde çok kısa bir şekilde Apache ve PHP kurulumundan bahsedildikten sonra ayrıntılı olarak çeşitli uygulamaların nasıl yapıldığına dair bilgiler verilecek o yüzden referanslara bakmanızı öneririm.

    Tabii ki PHP uygulaması yapılacaksa bir şekilde PHP derleme motoruda kurulmak zorunda yoksa üstteki üç sayfanın bir anlamı kalmaz . PHP motorunu kurabilmek için gerekli dosyaları yukarıda belirtilen yerlerden edinebilirsiniz .

    PHP Kurulumu

    Bu yazı dizisinin asıl amacı PHP kurulumunu öğretmek yerine PHP kullanmayı öğretmek olduğu için PHP nin kurulumundan çok basit bir şekilde söz edilecektir. PHP kuruluşu aynı anda Apache web sunucusunun da kuruluşunu içerdiği için RPM ya da hazır paket kullanmak yerine dosyaların .tar.gz hallerinin kullanımı yerinde olacaktır. Elimizde hem PHP için hem de Apache web sunucusu için gereken targz dosyalarının olduğunu ve isimlerinin apache_1.3.2.tar.gz , php-3.0.2.tar.gz olduğunu kabul edelim.Bu arada sisteminize bir adet SQL sunucusu kurmanizda yerinde olacaktir. Eğer Redhat kullanıyorsanız ilk kurulum sırasında PostgreSQL seçeneğini işaretleyerek Redhat kurulduğu anda bir SQL sunucusu sahibi olabilirsiniz ancak size tavsiyem www.mysql.com <http://www.mysql.com> adresinden Redhat için gereken RPM dosyalarını indirerek rpm -i komutu ile MySQL sunucusunu kurmanızdır.

    Kurulum işlemi aşağıdaki şekilde olacaktır :
    1-    gunzip apache_1.3.2.tar.gz

    2-    tar xvf apache_1.3.2.tar
    3-    gunzip php-3.0.tar.gz
    4-    tar xvf php-3.0.tar
    5-    cd apache_1.3.2
    6-    ./configure -prefix=/www
    7-    cd ../php-3.0.2
    8-    ./configure -with-mysql -with-apache=../apache_1.3.2 -enable-track-vars
    9-    make
    10-    make install
    11-    cd ../apache_1.3.2
    12-    ./configure -prefix=/www -activate-module=/src/modules/php3/libphp3.a
    13-    make
    14-    make install
    15-    cd ../php-3.0.2
    16-    cp php3.ini-dist /usr/local/lib/php3.ini
    17-    add this line to /www/conf/httpd.conf :


    AddType application/x-httpd-php3 .php3

    Yukarıdaki kurulum PHP 3 için geçerli olmakla beraber eğer PHP 4 kullanmaya karar verirseniz paketleri “ tar zxvf ” komutu ile açtıktan sonra içindeki README dosyalarında kuruluş adımlarının buna çok yakın olduğunu sadece dosya ve dizin isimlerinin ufak değişikliklere uğradığını görürsünüz .

    Bunların hepsini yaptıktan sonra web sunucunuzu durdurup tekrar başlatmanız gerekmektedir . Bunu makinanizi açıp kapayarak yapabileceğiniz gibi tüm httpd process lerini kill -9 kullanarak yok ederekte yapabilirsiniz ama tek satırda :

    kill -TERM `cat /www/logs/httpd.pid`

    yaparsanız bunların hepsinin yapacağı işi yapmış olur.En son aşamada ufak bir PHP betiği yazarak çalıştırıp sistemin doğru olarak kurulup kurulmadığına bakmak mantıklı bir hareket olacaktır. Bunun için yapılması gereken ise çok basittir. Herhangi bir metin editörü ile içinde bir PHP betiği bulunan basit bir sayfa hazırlayarak bunu web sunucusunun /www/htdocs/ dizininin altında bir yere koyarak bu sayfayı internet tarayıcısından çağırmak kontrol için yeterli olacaktır .Aşağıdaki HTML kodunu “pico” ile aynen yazın :

        <HTML>
        <HEAD>
        Php deneme betigi
        </HEAD>
        <BODY>
        <?
            print “ Php deneme çalışması “;
        ?>   
        </BODY>
        </HTML>

    daha sonra CTRL + O tuşuna basıp dosya adı olarak deneme.php3 ( eğer PHP 4 kurduysanız sadece deneme.php ) verip Enter tuşlayın. Daha sonra CTRL + X kombinasyonu ile “ pico “ dan çıkın . Dosya /www/htdocs/deneme.php şeklinde kaydedilmiş olacaktır.

    Daha sonra tarayıcınızı açıp XXX.XXX.XXX.XXX/deneme.php şeklinde ( ilk 4 octet sunucunuza atadığınız IP numarasına karşılık gelmekte mesela 10.0.0.32 gibi ) dosyayı çağırın , eğer sunucunuza IP adresi atamadıysanız localhost/deneme.php ( localhost yazan yere makinaniza verdiğiniz ismi yazmanız gerekmektedir mesela penguin gibi ) şeklindede çağırabilirsiniz ancak sisteminizde kurulu bir DNS sunucusu olması gerekmektedir eğer aynı makinayı hem sunucu hem de istemci olarak kullanıyorsanız o zaman DNS sunucusuna gerek kalmayacaktır. Dosyayı çağırdığınızda tarayıcının içinde “ Php deneme çalışması “ yazan bir sayfa gelecektir. Eğer bu geliyorsa sistemimiz çalışmaya hazır haldedir değilse dosyanızın haklarını değiştirmeniz gerekmektedir bunu chmod komutu ile yapabilirsiniz . Bu komut hakkındaki daha ayrıntılı bilgiyi man chmod yazarak ya da info chmod yazarak bulabilirsiniz ama tavsiyem Midnight Commander kurarak dosyanın üzerine gelip menüye geçtikten sonra chmod yapmanızdır görsel olduğu için yapmanız gerekeni çok kolaylaştıracaktır.


     


    Eger sonuç olarak belirtilen sey browser penceresine yazilmazsa su tür hatalarla karsilasabilirsiniz :



    - Yazdiginiz kod aynen ekrana basilmaktadir. HTTP sunucunuzun .php ya da .php3 dökümanlarini algilayamamasi durumu söz konusudur. PHP kurulumunuza göz atin ayrica .php ya da .php3 dosya tipinin Apache nin /conf/httpdconf dosyasinin içinde tanitilip tanitilmadigina bakin


    - Yazdiginiz kodun sadece belli bölümleri ekrana geliyor ve hyperlink ler dogru çalisiyor. PHP dosyalarinizin versyon sorunu olabilir eger PHPV4 kurduysaniz ve dosya uzantilarini .php3 vermeyin , bunu yaparsaniz yukaridaki sorun olusuyor. ( IIS de test edilmistir )


    - Syntax error hatasi alabilirsiniz. Bu islerin yolunda gittigini ancak program yazma konusunda biraz daha çalismaniz gerektigi anlamina gelir çünkü PHP derleme motoru dosyanizi derlemeye çalismis fakat bazi yazim hatalarindan dolayi basarili olamamistir.


    - Browser sayfayi bulamamis ve IE kullaniyorsaniz DNS hatasi vermistir. Dosyanizin yolunu dogru verdiginizden emin olun ve dosyanin /www/htdocs altinda bulundugundanda emin olun. Genelde kullanicilar dosyalarini kendi home dizinleri altinda yaratirlar ve tasimayi unuturlar. Saatlerce bilgisayar basinda ugrasmissaniz emin olun bu hataya düseceksiniz.


    - Browser yetki sorunu olduguna dair bir hata vermistir. Chmod ve chown komutlarini dogru parametrelerle kullandiginiza emin olun zira dosyayi herkesin görmesi gerekmekte ancak dosya hala size ait ve sizin tarafinizdan kullanilabilir görünmekte.


    - Bilgisayariniz hiçbir reaksyon vermemekte. Apache nin çalistigindan ve httpd processinin çalistigindan emin olun. Bunu ps komutunu kullanarak görebilirsiniz.Eger zombie process leriniz varsa bilin ki isletim sistemi katmaninda ya da yazdiginiz kod içinde bir hata var. Sorunu /var/log/ altindaki log dosyalarindan görebilirsiniz.


    ************************
    * PHP de degiskenler *
    ************************


    Butun programlama dillerinde oldugu gibi PHP dilinde de degisken kavrami mevcut zaten olmasaydi herhalde algoritma gibi bir kavramimiz olmazdi :). Degiskenler adi ustunde kendilerine veri atanip bu verinin degisitirilmesi icin kullanilan seylerdir , bunlari yemek kaplarina benzetebiliriz hani bir yemek kabina istedigimiz yemegi koyabilir ve sonra yikar tekrar kullaniriz ya bir degiskenede istedigimiz degeri atar sonra sıfırlar ve yeni bir deger atayabilir artik eskiyincede cope atabilir ya da oldurebiliriz. Degiskenler bizim icin ileride cok buyuk onem tasiyacak zira su an basit bir iki arac gibi gorunmelerine ragmen mukemmel bir menu ve aksam yemegi icin kullanilacak olan tabaklar ve kaplar buyuk onem tasimakta ;). Form tasarlarken dongu kurarken ve karar verirken bizim icin cok onemli olacak olan degiskenler butun dillerde aslinda birer temel tastir ve ilk ogrenilmesi gereken seylerden birisidir.


    PHP degiskenleri syntax i cok benzemesine ragmen C deki gibi daha onceden tanimlanmak zorunda degildirler ve o an yaratilarak o an kullanilabilirler yanliz unutulmamasi gereken PHP OOP e yakin oldugu icin her degiskenin kullanildigi yerin o degiskene has olmasi ve parantezleriniz bittikten sonra o degiskenin diger parantez icinde gecen yapilarda kullanilamamasidir. PHP de bir degisken tanimlamak icin ilk once mantikli bir sebebimiz daha sonra klavyemizde $ tusunun bulunmasi gerekmektedir zira PHP de tum degiskenler daima $ isareti ile baslar.Ornek :


    $ad="Ali";
    $soyad="Alemdaroglu";
    $sayi=3;
    $yuzde=0.2739;


    Yukarida gordugunuz gibi degiskenler tanimlanmadan dogrudan deger aldilar ve deger aldiklarinda aslinda yaratildilar ve tipler belirlendi. Ad degiskeninin bir karakter dizisi oldugu sayi degiskeninin bir gercel sayi oldugu ve yuzde degiskeninin bir kayan noktali sayi oldugu hep esitliklerden sonra anlasilir. Boylece degisken tipi tanimlama zorlugu ise ortadan kalkar zaten C de en buyuk sorunlardan biriside dinamik boyutta array ya da string tanimlayamamaktir.


    Degiskenler ve fonksyonlardan donen ( ornegin bir database query ) veriler ,ki degiskenlere atanir, eger bir seyin sonucu olarak donuyorlarsa isimiz bittikten sonra bu sonuclari parantezin bitmesini beklemeden yok edebiliriz ve bu bize hafiza kazandiracaktir. Madem hafizadan bahsediyoruz gelelim degisken tiplerine ve hafizada kaplayacaklari yer miktarina ve anlamlarina.


    --------------------------
    | Degisken Tipleri |
    --------------------------
    * Tam sayilar : Adindanda anlasilacagi gibi “-” ve “+” olabilen toplama cikarma islemlerinde kullandigimiz kusurati olmayan sayilardan bahsediyoruz. PHP de tam sayilar asagidaki sekillerde gosterilebilirler ve unutmayalim ki tam sayi her sayma sisteminde tam sayi olacaktir yani 10 sayisi onluk duzende tam sayi oldugu gibi onaltilik sayi sistemindede tam sayi olacaktir yani A seklinde.


    $a=1234;
    $a=-1234;
    $a=0123; <---- 8 li sayma duzenini ifade eder yani 3x1 + 2x8 + 1x64 = 83 tur
    $a=0x12; <---- 16 li sayma duzenini ifade eder yani 2x1 + 16x1 = 18 dir


    * Kayan noktali sayilar : Virgulden sonra sayilar bulunduran bir kavramdan bahsediyoruz yani pi sayisi gibi ya da meshur 1/3 gibi. Ornek :


    $a=1.234;
    $a=0.1234;
    $a=1.23e4; <---- 1.23 x 10^4 = 1230


    * Diziler : Aslinda basit bir isim ya da tumce dizi ( string ) olabilir ama tanim yapmak gerekirse yan yana gelmis karakterler butununu anlayabiliriz.Hemen ornek :


    $a=”deneme bir iki uc” ;
    $a=”deneme 1 2 3”;


    Yukarida gordugunuz gibi bir dizinin icinde sayi da kullanabiliriz ama bu demek degildir ki kullandigimiz sayilar normal bir dizi elemani degil tam sayidir , aksine bu elemanlarda dizinin bir elemanidir ve karakter veri tipindedirler.


    * Katarlar : Katarlar karmasik yapida olan ve aslinda spreadsheet turevi programlarda gordugumuz tablo mantiginda olan yapilardir. Bunlar bir izgaranin hucrelerine yapistirilmis olan diziler olabilecegi gibi tam ya da kayan noktali sayilarda olabilir. Katarlarda katar boyutu onceden verilebilecegi gibi dinamik katarlarda tanimlanabilir ve daha sonra bu katara elemanlar eklenebilir. Katarlar daima koseli parantezlerle gosterilir ve birden fazla boyutlu olabilirler ve her boyutun ilk elemani “0” dir. Katarlara ornek vermek gerekirse :


    $a[0]=”def”;
    $a[1]=”abc”;
    $b[deneme]=0;


    Buradaki katarlarda ilk elemana def sonraki katar elemanina abc verdik , sonraki ornekte ise katarin kacinci elemaninin sıfır olacagini belirtmektense deneme elemaninin sıfır olacagini belirttik ki bu cok buyuk bir esneklik.


    $a[]=”PHP”;
    $a[]=”Turkiye”;
    $a[]=”Grubu”;


    Bu sekilde ise yukarida soyledigimiz gibi ilk elemani PHP sonraki elemani Turkiye bir sonraki elemani ise Grubu seklinde katara herhangi bir parametre vermeden ekledik.Ilk yaptigimiz harekette katar yaratildi sonraki islemlerde ise katar elemanlari ard arda katara eklendi


    PHP Directory Komutları:


    PHP nin kurulu olduğu bilgisayar veya scriptin çalıştığı serverda dosyalar veya dizinler üzerinde çeşitli işlemleri gerçekleştiren komutları vardır.Bunlardan dosyalar üzerinde işlem yapan(örn:dosya silme , dosya kopyalama,büyüklüğünü öğrenme,açma,kapama vb gibi) komutları PHP nin File System Function (Dosyasistemi fonksiyonları) içinde açıklanır.Diğer yandan Directory(Klasör) İşlemlerini ise burada açıklayacağımız fonksiyonlar gerçekleştirir.


     PHP nin Klasör komutları şunlardır:


     chdir()


    dir()


    closedir()


    opendir()


    readdir()


    rewinddir()


     Şimdi bu komutları yazacağımız bir programın içinde kullanarak öğrenelim.


    Yazacağımız programda önce verilen bir klasörde bulunana dosya ve altklasörleri ekrana yazan bir program yazalım..


    ÖRN-1:


     <?php


     $hedef="c:/windows/desktop/ftp/klasör1";


     chdir($hedef);


    $link=@opendir($hedef);


    if(!$link){


    echo “Belirtilen isimde bir klasör bulunamadı veya belirtilen yol yanlış!”;


    }


    while($dosya=readdir($link)){


         if ($dosya != "." && $dosya != ".."){


         $tip=filetype($dosya);


         echo $tip.” ”.$dosya ;


         }


    }


    closedir($link);


     ?>



    Şimdi bu kodları adım adım inceleyelim.


              $hedef="c:/windows/desktop/ftp/klasör1";


    Öncelikle $hedef değişkenine içeriğini listeleyeceğimiz klasörün adresini veriyoruz.Bu işlemi      


     C:/windows/desktop/ftp/klasör gibi kesin bir bildirim ile verebileceğimiz gibi bu dosyanın bulunduğu klasöre göre /klasör gibi göreceli bir adresde verebiliriz.


     chdir($hedef);


    bu satır ile php scriptine klasör değiştirmesini söylüyoruz.Burada dikkat edilmesi gereken bir nokta var.


    Eğer biz chdir() komutunu kullanmazsak bu script yine verdiğimiz klasördeki içeriği listeleyecek.Ama bu defa içeriğim tipini yani dosya mı yoksa klasörmü olduğuna karar veren PHP nin Filesystem Function (Dosyasistem komutlarından) filetype() komutunu kullanamayacağız. Çünkü chdir() kullanmadan filetype() kullanırsak dönen değer  fifo, char, dir, block, link, file ve  unknown tiplerinden biri olacağına null yani boş değer olmaktadır.


     Unutmadan ekleyelim,burada gelen içeriğin dosya mı yoksa klasör mü olduğunu bize söyleyen filetype()


    Komutu yerine yine aynı işleve sahip is_dir(), is_file() , is_link() komutlarıda kullanılabilir.



    $link=@opendir($hedef);


     bu satır ile $hedef ile belirtilen klasörü açıp bağlantıyı $link değişkenine atıyoruz.Burada opendir() komutundan önce @ kullanmamızın sebebi hata durumunda yani belirtilen dosyanın açılamaması veya belirtilen isimde bir dosya bulunamaması halinde verilecek hata mesajını kontrol etmek ve kullanıcıya kendi hata mesajımızı iletmek.


     if(!$link){


    echo “Belirtilen isimde bir klasör bulunamadı veya belirtilen yol yanlış!”;


    }


     $link=@opendir($hedef);  fonksiyonu yapılan işlem sonrası başarı halinde true hata halinde ise false değerini gönderir.yani $link değişkeni yada true değeri yada false değerine sahiptir.


    If kontrol deyimi ile $link false ise yani opendir() fonksiyonu ile klasör açılamamışsa ekrana kendi hata mesajımızı yazdırıyoruz.


     while($dosya=readdir($link)){


         if ($dosya != "." && $dosya != ".."){


         $tip=filetype($dosya);


         echo $tip.” ”.$dosya ;


         }


    }


     yukarıdaki kod grubunda önce bir döngü kurduk ardından if ile bir kontrol oluşturduk.Bunlara geçmeden önce  yukarıda kullandığımız readdir() fonksiyonunu açıklayalım.


    Evet readdir() fonksiyonu ile sizinde tahmin etmiş olduğunuz gibi opendir() fonksiyonu ile açılmış olan klasörden içerik okuyoruz. Burada while ile döngü kurmamızın sebebi readdir() fonksiyonu her çağrılışında belirtilen klasörün içinden bir dosya veya klasör adı okur.Bu durumu PHP nin mysql_komutlarından mysql_fetch_array() a benzetebiliriz.


     If  kontrol deyimi kullanılarak dosya isimlerinin “.”  veya “..” olmaması sağlanır yani eğer dosya “.” veya “..”  ismi ile geliyorsa bunu ekrana basmıyoruz.Eğer if deyimini kaldırarak scripti çalıştırırsak ekrana yazılan dosya ve klasör isimleri arasında “.” ve “..” isimlerininde olduğunu görürüz.Bunun sebebini açıklamak isterdim ama ne yazıkki benimde bir fikrim yok.J


     If koşulunun olumlu olamsı yani dosya isimlerinin “.” ve “..” dan farklı olması halinde


    filetype() fonksiyonu ile bunu dosyamı yoksa klasör adımı olduğunu öğrenip bunu $tip değişkenine atıyoruz.Ve ardından önce tipini sonrada adını ekrana basıyoruz.


     While döngüsü sona erdiği zaman yani klasör ün tüm içeriği okunduktan sonrada dongüyü bitiriyoruz.


    Ve ardından programımızın son satırı :


      closedir($link);


     komutu ilede opendir() kullanarak açtığımız klasörü kapatıyoruz.Burada yine önemli bir noktaya dikkat etmemiz gerekiyor.


    closedir() fonksiyonu ile daha önce açılmış bir klasörü  kapatabilmemiz için bu klasörün mutlaka opendir() fonksiyonu ile açılmış olması gerekiyor.Şimdi siz içinizden klasörler başka bir komut ilede açılabiliyor mu? Diye geçiriyorsunuzdur.Hemen cevaplayalım:


     Klasör açmak içindekileri ekrana basmak için ve onu kapatmak için yukarıdaki komutlardan farklı bir fonksiyonumuz aslında bir CLASS ımız varyani bir nesne.


     dir()



    bu nesne aslında tam olarak nesnede değil görünürde nesneye dayalı bir mekanizma sözkonusu bir klasörü okumak için..


    dir($hedef);


    satırı ile $hedef ile belirtilen klasör açılır.Bu klasörü dir()  nesnesi ile açtığımız zaman okumak için readdir(), kapatmak içinde closedir() fonksiyonlarını kullanamıyoruz.İyi peki ama nasıl okuyup nasıl kapatacağız klasörü..


     dir() fonksiyonu bir nesne olduğu için bu işlemleri yapan kendi methodları var..Bir örnekle açıklamaya çalışalım:



    <?php



    $hedef=”C:/windows/desktop/ftp/klasör1”;


    $d = dir($hedef);


     echo "Path: ".$d->path."<br>\n";


     while($dosya=$d->read()) {


    echo $dosya."<br>\n";


    }


     $d->close();


     ?>


     Bo kodda $d=dir($hedef);  yazarak $hedef klasörü üzerinde yapılacak açma,okuma ve kapatma işlemleri ni gerçekleştirecek olan dir() classının $d ye atadık.ve dir($hedef); diyerek klasörü açmış olduk.


    dir() nesnesini iki özelliği vardır.Bunlar  path ve handle dir.


     Path özelliği klasörün adresini verir.


    echo “path :”.$d->path;  yazılarak bu nesnenin özelliğine erişilir.


     while($dosya=$d->read()) {


    echo $dosya."<br>\n";


    }


     yukarıdaki döngünün amacı ve nasıl işlediği yukarıda anlatımıştı.Burada sadece açıklanacak nokta


    $dosya=$d->read();


     satırıyla $d nesnesinin read() methoduna erişilir.ve dosya adı $dosya değişkenine aktarılır.


     $d->close();


     satırıylada bu nesnenin close methodu kullanılarak klasör kapatılır.Bu tip kapatma sadece dir() nesnesi ile açılan klasörlerde kullanılır.


     Bu nesnenin birde rewind() methodu vardır.Bu method açılan klasör akımını yani bağlantıyı resetlemek için kullanılır.Görünürde bir faydası yok.(Ben saçmalamaya başladım.yahu su rewinddir() komutunun ne işe yaradığını tam olarak bilen biri buraya onu eklerse bende saçmalamayacağımJJJ)


      Peki şimdi bu komutlarla ne yapabiliriz diye düşündük ve aklımıza şöyle birşey geldi.


    Öyle bir script yazalımki sayfa her çağrılışında farklı bir resmi ekrana basılsın.(veya bir text dosyasının içinide ekrana basabiliriz.)


     ÖRN-2:


     <?php


     $hedef="c:/windows/desktop/ftp/klasör1";


    $i=0;


     chdir($hedef);


    $link=@opendir($hedef); //klasörü açıyoruz


    if(!$link){echo “belirtilen yol yanlış veya dosya bulunamadı.”;}


    while($dosya=readdir($link)){


         if ($dosya != "." && $dosya != ".."){


         $tip=filetype($dosya);


           if($tip=="file"){


           $dosyadizi[$i++]=$dosya; //dosya isimlerini bir diziye atıyoruz.


           }


         }


    }


    closedir($link);


     srand((double)microtime()*1000000);     $limit=sizeof($dosyadizi);  //$dosyadizi dizsinin eleman sayısını öğreniyoruz.


         $no = rand(0,$limit-1);   //0 ile $dosyadizi dizisinin eleman sayısının bir eksiği arasında rastgele sayı   


                                                                  //üretiyoruz.


    echo "<img src=\"$hedef/$dosyadizi[$no]\" >";

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    kabus
    kabus's avatar
    Kayıt Tarihi: 29/Temmuz/2002
    Erkek

    oturup kendin yazdiysan saygi duyarim ama,


    baska bi yerden copy paste yapiyosan ,yapma be kardesim link ver biz o bi satirdan gidebiliriz kaynaga...


    Biz seninle farkinda olmadan ayri pencerelerden ayni yildizlara bakmaya devam edecegiz.
Toplam Hit: 1892 Toplam Mesaj: 2