25 Ocak 2012 Çarşamba

PHP Çok Boyutlu Diziler


C ve Java dillerinde,birden fazla boyuta sahip dizi tanimlamak gercekten de ileri seviye uzmanlik gerektiren kavramlardir.PHP de ise bu konu icin,kimsenin basini agritmadan kisaca tanimlanabilcek ve uygulanabilecek yazim kurallari gelistirilmistir.Bir diziye istediginiz kadar cok boyut katabilirsiniz.


PHP icinde bir diziyi kullanirken ona iki'den fazla boyut katmak,cok ta guzel bir programcilik teknigi degildir.Bu hem sizin hemde PHP nin yapisi itibari ile bir cok extra yuku beraberinde getirir.Sizin icin, kodun sonradan baska kisiler tarafindan bakiminin zorlasasmasi ,sunucu icin ise kaynaklarinin yok edilmesi bakimindan onemli ve dusunulmesi gereken,ve hatta mumkunse iki den fazla boyut icin kacininlmasi gereken programlama teknikleridir...





Simdi de orneklerle konuyu aydinlatmaya calisalim:


<?php


$ornek_dizi = array("Ambalajlar" => array("kagit","plastik"),"Urunler" => array("et", array("sut","yumurta")));
print $ornek_dizi["Ambalajlar"][1];
//ekrana plastik yazdirdim...
print $ornek_dizi["Urunler"][2][1];
//ekrana sut yazdirdim...
?>



PHP if deyimi


Bir onceki makalemizde,formlar yardimiyla verilerin kullanicidan alinip server uzerindeki bir PHP dosyasi yardimiyla nasil islenecegini gormustuk."PHP ile HTML taglarinin kullanimi" isimli bu makalemizin sonunda yazdigimiz kucuk "Kredi Istek Formu" uygulamasinda kullanicin girdigi "Yas" alani icin bir kontrol gerceklestirmemistik.Oysaki gercek hayatta biliyoruz ki yasi "0-5" arasindaki hic kimse boyle bir bilgisyar formunu dolduramaz veya kimsenin yasi "189" gibi bir deger alamaz.
Bir programlama dili icerisinde "Karar Verme Yapilari" onemli yer tutar.Bu cogu zaman verdigimiz sartlar icerisinden bilgisayarin uygun olani o andaki verilere gore secmesini saglamaktir.


Bir Insanin Alisveris Surecini Incelemek ve Programlama Mantigini Anlamak


Simdi sizlere her gun yaptigimiz bir alis-veris sureci icin beynimizin nasil calistigini gostermek istiyorum.Bu sekilde programlama mantigini ve beyninizin nasil bilgisayar gibi calistigini ve sandiginizdan ne kadar fazla seye sahip oldugunuzu goreceksiniz.Programcilik nedir ki? Zaten her gun bunu farketmesek te yapiyoruz :)


1.Buzdolabini kontrol et.Sut,peynir,Yumurta bitmis mi?Gerekli ise listeye ekle.
2.Ekmeklige bak Ekmek lazim mi?Lazimsa listeye ekle
3.Eger evcil hayvanin varsa ihtiyaclari 6'inci isleme git.
4.Supermarket'e git.
5.Listedekileri cebindeki 10.000.000 TL'ye gore al.
6.Evcil hayvanin yiyecegini kontrol et.Lazimsa listeye ekle
7.Hayvan Mutlu.
8.Supermarkete git.Listedekileri al.
9.Eve Don TV Izle.
10.Keyfine Bak.


IF Yapilari


Bir onceki makalede "if" yapisini daha size bu makaleyi yazmadan kullanmistik.Kusura bakmayin :)).Saka bir yana bu onemli yapi ile olabildigince erkenden hasir nesir olmanizi saglamak icin bunu yaptik."IF" yapilari belkide programcilarin en cok kullandigi yapilardir.Neredeyse her karar verme yapisinda kullanilirlar.Kullanim sekli cok basit olarak soyledir.


IF (eger sart saglaniyorsa) satirdaki kodu uygula


if karar verme yapisinda eger ilk verilen satirdaki kod grubu sartlari sagliyorsa satirin geri kalanindaki kod grubu uygulanir.Eger sartlari saglamiyorsa goz ardi edilerek bir alttaki satir okunur.


Bir mantiksal ornek veririsek,


if (hava yagmurlu ise) semsiyeni al
Disari cik



Ilk satirda if komutundan sonra sartimizi belirttik.Bilgisyar havayi kontrol etti eger yagmurlu ise bize semsiyeyi aldirdi.Eger hava yagmurlu degilse direkt olarak bizi disari cikartti.Mantik cok basit.


Eger verecegimiz sartlar bir tek komutunda belirtilemiyorsa soyle bir yapi kullaniyoruz.


If (eger sart saglaniyorsa)
{
Bu parantezlerin icinde verilen tum kod grubunu uygula
}

Mantiksal ornegimize donersek bu yazim sekli icin ornegimiz su sekilde,


If (hava yagmurlu ise)
{
Semsiyeyi Al
Yagmurlugu Al
}


Disari cik



Bir kez daha belirtelim "Disari cik" terimi her sart altinda uygulanacaktir.Ama onemli olan nokta biz disariya semsiye ve yagmurlugu alip mi cikacagiz yoksa almadan mi? Iste buna bilgisyar hava durumunu kontrol ederek karar veriyor.Disariya eger hava yagmurlu ise bizi elimizde semsiye ve yagmurlukla cikariyor.


Parantezlerin icindeki ifadenin buyuklugu veya ne kadar fazla kod icerdigi hic bir zaman onemli degildir.


Boolean Degiskenler


Degisken tiplerini bir onceki konmuzda siniflandirmistik.Ayni string degisken tipi gibi boolean degisken tipi de mevcuttur.Boolean degiskenler yanlizca iki deger alabilir.Dogru ve Yanlis
Eger boolean olarak tanimladigimiz degiskenimiz dogru degerini donduruyorsa alacagi deger numerik olara "1" dir.Eger boolean degiskenimiz "yanlis" degerini donduruyorsa alacagi deger "0" dir.


Ornek vermek istersek,


$Degisken = true;


Burada yazilan "true" ifadesrinin ingilizceden turkceye tam cevirisi "dogru" dur.
Boyle bir satir kod icin echo komutunu kullanarak $Degisken degiskeninin tuttugu degeri gormek istersek,


echo $Degiken;


ekranda yanlizca "1" degeri gorunur.


Boolean Islemler


">" ve "<" Operatorleri


Temel matematik bilgisidr.">" ifadesi buyuk , "<" ifadesi kucuk anlamina gelir.Karar verme yapisi icerisinde kullanmak istedigimizde matematikte kullandigimizdan cok farkli islevler gormezler.


Ornek vermek istersek


if (8<9) echo "Sekiz rakami Dokuz rakamindan kucuktur";


if yapisi kullanilirken parantesin icinden,PHP bir sonuc cikarir.Bu sanuca gore islemin gerisinemi devam edecek bir saonraki satiri mi okuyacagina karar verir.Asla "olabilir" veya "belki" gibi bir sonuc parantezin icinden cikmaz.Kisaca PHP ya "Dogru" icin 1 yada "Yanlis" icin 0 olarak kesin kararini verir.


Bir ornek te degisken kullanarak yapalim,


if ($SansliNumara < 9) echo ("Sansli numaramiz 9 rakamindan kucuk");


Simdi de iki degiskeni if icerisinde kullanarak devam edelim,


if ($SansliNumara < $LotoNumara)
{
echo ("Sansli numaramiz,Loto numasindan kucuk");
$SansliNumara = $SansliNumara +1;
}


Simdi de gercek bir ornek uzerinde uygulama yapalim.Ornegimizde PHP aklinda bir sayiyi tutarak bizim onu tahmin etmemizi isteyecek.Bir nevi tahmin oyunu.


1.Text editorunuzu acin ve asagidaki kodlari yazin.


<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD=GET ACTION="tahminoyunu.php">


1-10 arasinda bir rakam tuttum.Bir tahmin yapmak istermisin?


<INPUT NAME="Tahmin" TYPE="Text">


<BR>
<BR>


<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>


2.Bu dosyayi "tahminoyunu.html" olarak kayit edin.


3.Yeni bir text editoru acarak asagidaki kodlari yazin.


<HTML>
<HEAD></HEAD>
<BODY>
<?php


$Sayi = rand (1,10);


if ($Tahmin > $Sayi) {


echo "Tahmin ettiginiz sayi benim dusundugumden buyuk";
echo "<BR>Benim dusundugum sayi $Sayi kaybettiniz.";
exit;
}


if ($Tahmin < $Sayi) {


echo "Tahmin ettiginiz sayi benim dusundugumden kucuk";
echo "<BR>Benim dusundugum sayi $Sayi kaybettiniz.";
exit;
}


if ($Tahmin = $Sayi) {


echo "Tahmin ettiginiz sayi benim dusundugum sayi ile ayni ";
echo "<BR>Benim dusundugum sayi $Sayi Tebrikler.";
exit;
}
?>
</BODY>
</HTML>




4.Bu dosyayi "tahminoyunu.php" olarak kayit edin.
5."tahminoyunu.html" dosyaysini acip bir sayi girin.


6.Gonder tusuna bastiginizda sizi bir sonucun beklemesi lazim.Nasil oyunu begendiniz mi?



PHP Global Değişken

Cevap:global deklarasyonunu fonksiyon icinde kullanarak, ulasilmak istenen degiskenin global oldugu soylenebilir.


$degisken = "Ataturk";
function ornek () {
global $degisken;
print $degisken; //Ataturk kelimesi ekrana yazdirilir.
}


Ikinci bir yol : Ulasilmak istenen global degiskene $GLOBALS dizisi yardimiyla ulasilir.


$degisken = "Ataturk";
function () {
$degisken = 1923; //yerel $degisken
print "Global degiskene fonksiyon icinden ulasiyorum $GLOBALS[degisken]";
print "Local degisken degerimiz ise $degisken";

PHP Hata Bulma


Kimi zaman FORM'lardan gelen veya GLOBAL olarak tanimlanmis olmasi beklenen degiskenlerin ya yok oldugunu veya bekledigimiz degeri tasimadigini farkederiz. Bu programlarimizin beklenmeyen sonuclar vermesine yol acabilir. Asagidaki iki kucuk script sirasiyla FORM'dan gelen degiskenler ve $GLOBALS array'inin herhangi bir anda hangi degiskenlere sahip oldugunu ve bu degiskenlerin degerinin ne oldugunu listeleyip kisa yoldan hata bulmamiza yardimci olur.


POST Methoduyla formunuzdan gelen degiskenleri ve o andaki degerlerini gormek icin. (not: GET Methoduyla gonderilen form degerleri zaten url kutusunda goruldugu icin gerek yok)




echo "POST methodu ile gonderilen degerler:<br>";
reset ($HTTP_POST_VARS);
while (list ($anahtar, $deger) = each ($HTTP_POST_VARS)) {
echo "$anahtar => $deger<br>";
}




$GLOBALS[] array'inin icerdigi degiskenler ve degerleri (Bu array'de sistem ve programci tarafindan olusturulmus degiskenler bir arada bulunmaktadir):




echo "$GLOBALS arrayinin degerleri<br>";
reset ($GLOBALS);
while (list ($anahtar, $deger) = each ($GLOBALS)) {
echo "$anahtar => $deger<br>";
}

PHP Dosya ve Dizin İşlemleri


Butun bilgisayar programcilari yeri geldiginde dosyalarla ugrasmak zorunda kalir.Bu bazen gecici verileri dosyalarda saklama isteginden , uygulamanin setup bilgilerini saklamaya kadar genis bir yelpazede yer alir.


"Dosya" aslinda hardisk,floopy,cdrom gibi medyalarda saklanan sirali bytelardan baska bir sey degildir."Dizin" ise ozel bir dosya tipidir ve icinde diger dosyalarin ve dizinlerin isimleri saklanabilir.


Linux ve Windows


Unix tabanli isletim sistemleri(Linux gibi) dosyalara ulasmak icin tanimlanan "yol"larda,"/" isaretini kullanirken windows isletim sistemleri "\" ters slash tabir edilen isareti kullanmaktadir.


Unix icin dosya yolu ornegi,


/home/serkan/www/turkphp


Windows icin dosya yolu ornegi,


C:\belgelerim\www\turkphp\serkan


Bu olayin yazdigimiz kodlarda problem yaratacagini dusunebiliriz.Ancak windows uzerinde calisan PHP bu tip durumlarda kodlari otomatik olarak cevirerek kendi kullanabilcegi hale getirmektedir.Mesela ,


$fp = fopen ("/data/data.txt","r");


seklinde yazilan bir kod windows altinda da sorunsuz caliscaktir.Cok spesifik olmayan durumlar icin bu kural gecerlidir ve basinizi pek agritmaz.Yazinin ilerleyen kisimlarinda bir kac aciklama bu konu icin yapilacaktir.


Dosyalarla Calismak


Tipik olarak dosyalarla calisirken asagidaki adimlar izlenir.



  • Calismak istediginiz dosyayi yolu ile belirterek acin.
  • Dosyayi okuyun , dosyaya yazin vb...
  • Dosyayi kapatin.

    fopen ()


    Ilk gorecegimiz dosya fonksiyonu fopen (),dosyalari acmak icin kullanilir.Alabileegi 3 tane argument vardir :



  • dosyaadi
  • mode
  • use_include_path (opsiyonel olarak kullanabilirsiniz)

    Dosyalari acmak icin kullanilan bu fonksiyon ayni zamanda dosyalarin acilip acilamayacagini (yani izinleriniz tamam,dosya yerinde mi? gibi) kontrol icinde kullanilabilir.


    Ornek vermek istersek,


    $fp = fopen ("./data.txt","r");
    if (!$fp) die ("Dosya Acilamiyor");


    veya alternetif olarak tek satirda yazmak istersek,


    if (!($fp = fopen ("./data.txt","r"))) die ("Dosya Acilamiyor");


    Burada lutfen kafaniz karismasin.$fp degiskenine dosyanin yolunu veya fopen fonksiyonu kullanmamizin sonucundaki degeri esitlemiyoruz.Eger boyle yapmak isteseydik "==" kulllanirdik.Dikkat ederseniz burada bir test islemi gerceklesiyor.Yani aslinda biz belkide daha sonra kullanacagimiz bir dosyanin yerinde olup olmadigina bakiyoruz.Onun icin fopen fonksiyonu kullanarak dosyayi acmak istiyoruz.Donen degere gore if yapisi ile test islemini gerceklestiriyoruz.


    Bu komut kullanilarak yapilan yukaridaki gibi testlerde uzak host'lardaki dosyalarda kontrol edilebilir.Ornek vermek istersek,


    if (!($fp = fopen("http://www.turk-php.com/dosya.html","r"))) die ("Dosya Acilamiyor);


    if (!($fp = fopen("ftp://ftp.turk-php.com/dosya.html","r"))) die ("Dosya Acilamiyor);


    uzak host 'taki dosya "yanlizca okunabilir" olarak acilabilir.


    Eger daha once Unix tabanli bir isletim sistemi kulllandyisaniz bundan sonra yazacaklarimiza zaten asinasinizdir.Biz yine de bilmeyen insanlar icin bir tekrar yapmak istiyoruz.Cogu zaman gordugunuz ../data.txt veya ./data.txt gibi ifadeler ne anlama geliyor veya bu noktalar neden koyuluyor gibi?


    ./data.txt : scriptimiz ile ayni klasorde yer alan data.txt isimli dosya.
    ../data.txt : scriptimizin yer aldigi klasorun bir ustundeki klasorde data.txt isimli dosya.
    ../../../data.txt : scriptimizin yer aldigi klasorden uc level yukaridaki klasorde data.txt isimli dosya.


    Olayi anladiniz herhalde daha fazla ornek vermeye gerek duymuyorum.


    Simdi de dosyalari acarken kullandigimiz "mode" argumentine bakalim.


    r: Dosyayi yanliz okunabilir olarak ac.Kursor dosyanin basinda yer alir.
    r+: Dosyayi okunabilir ve yazilabilir olarak ac.Kursor dosyanin basinda yer alir.
    w: Dosyayi yanliz yazilabilir olarak ac.Kursor dosyanin basinda yer alir.Daha onceden var olan hersey yok olur.Eger boyle bir dosya yoksa PHP yaratmaya calisir.
    w+: Dosyayi okunabilir ve yazilabilir olarak ac.Kursor dosyanin basinda yer alir.Eger boyle bir dosya yoksa PHP yaratmak icin tessebuste bulunur.Dosya icinde daha onceden var olan hersey yok olur.
    a : Yanlizca dosyanin sonuna veri eklemek icin dosya acilir.Eger boyle bir dosya yoksa PHP yaratmaya calisir.Eklenen veriler dosyanin sonuna yazilir.
    a+ : Dosyanin sonuna veri eklemek ve dosya okunmak icin acilir.Eger boyle bir dosya yoksa PHP yaratmaya calisir.Eklenen veriler dosyanin sonuna yazilir.


    Mode argumenti ayni zamanda "b" degerini de almaktadir.Bu deger verildiginde dosya "binary" modunda islenir.Windows icin kullanislidir.Linux icin bu degerin bir anlami yoktur.


    "include_path" argumenti eger buyuk bir site uzerinde calisiyorsaniz ve "inc" dosyalari belirli bir klasor uzerindeyse php.ini dosyasinda "include_path" yolunu belirterek dosya acma islemlerinde bir kolaylik saglayabilirsiniz.ornek vermek istersek,


    php.ini dosyasinda "include_path" olarak /home/apache/inc verdiyseniz ve,


    fopen ("data.txt","r",1);


    yadiginiz zaman once data.txt dosyasi scriptin bulundugu klasorde aranacak eger bulunamaz ise /home/apache/inc klasorune bakilacaktir.


    fclose


    Dosya ile calismayi bitirdiginizde ,dosyanin kapatilmasi gereklidir.Bu islemi fclose () komutu ile yapabilirsiniz.Script calismayi bitirdiginde otomaik olarak butun acik dosyalar PHP tarafindan kapatilir.Size tavsiyemiz dosya ile calismayi bitirdiginiz anda bu komutu kullanarak dosyayi kaptmaniz.anck bu sekilde ayni scripti kullanan diger kullanicilar hizli bir sekilde servis alabilir.


    fclose ($fp);


    seklinde kullanilir.


    Dosyalardan okumak ve dosyalara yazmak


    Smdiye kadar dosya acma ve kapama islemlerini gorduk.Artik onlarin icinden verileri okuyabilir ve yazabiliriz.Ilk olarak cok basit iki komutu gorecegiz.Cogu islemde bu iki komut isinizi gorecektir.


    fread ()




    Bu komut dosyadan string karakterleri okumak icin kullanilir.Alabilcegi iki argument vardir.Ilki dosyanin ne oldugu,ikincisi integer yani sayisal olarak "length"(uzunluk) degeri.Ornek vermek gerekirse,


    $fp = fopen ("data.txt","r") ile dosyayi basarili sekilde actigimizi varsayalim.


    $data = fread($fp,10);


    burada $data degiskeni icine,actigim "data.txt" dosyasindan ilk 10 byte veriyi okuyup atamis oldum.


    Bu konu ile ilgili bilmeniz gereken bir kac onemli nokta bulunmaktadir.



  • Ilk 10 byte veriyi okuduk ve ayni islemi tekrar etmek istedik.Artik kursor ilk 10 byte'in bittigi yerdedir ve biz artik 10-20 bytelari arasindaki veriyi okuyabiliriz.
  • Eger dosya 10 byte'tan kucukse PHP dosyanin basindan sonuna kadar okur ve degeri dondurur,bir problem olmaz.

    fwrite ()


    Bu komut dosyaya veri yazmak icin kullanilir.Iki argument bu komutun kullanilmasi icin gereklidir .Birincisi dosyanin ne oldugu,ikincisi ise dosyanin icine ne yazilacagi. Eger islem basarili olursa degisken icin ,kac byte veri yazilmissa onun sayisal degeri doner,basarisiz olursa "-1".Ornek verecek olursak,


    $fp = fopen ("data.txt","w") ile dosyayi basarili sekilde actigimizi varsayalim.


    fwrite ($fp,"ABCDSerKanCeyLAnI");


    Bu komut "data.txt" dosyasinin basina "ABCDSerKanCeyLAnI" karekterlerini yazar.Daha onceden dosya icerisinde yazilmis tum veriler tamamen silinir.Yanlizca elinizde bu karaketerlerin yazili oldugu bir dosya kalir.Tekrar ediyoruz kursor bu karekter dizisinin sonuna gidip bekler.Bu komutu kullanirken aklinizda olsun, bilgisyara normal olarak klavyeden yaziliyor gibi karekterler yazilir ve kursor yazdiginiz yazi grubunun sonuna gidip bekler.


    Eger ozel bir uzunluk belirtmek isteseydik,bunu ucuncu argument olarak komuta su sekilde ekleyebilirdik,
    fwrite ($fp,"ABCDSerKanCeyLAnI",4);


    Bu komutla verdigimiz string ifadenin(ki bu "ABCDSerKanCeyLAnI" dir.) ilk 4 byte'i (ki bu "ABCD" dir.) $fp degiskeni ile belirttigimiz dosya icerisine yazilacaktir.Eger belirtilen uzunluk byte'i yazilacak ifadeden buyukse ifade'nin hepsi yazilir,bir problem olmaz.


    Artik bu kadar konusma yeterli uygulama yapmanin zamani geldi.




    Basit Bir Hit Sayaci


    <?php
    //hit_sayac1.php


    $sayac_dosyasi = "./sayac.dat";


    if (!($fp = fopen ($sayac_dosyasi,"r"))) die ("Dosya Acilamiyor");


    $sayac = (int) fread($fp,20);


    fclose ($fp)


    $sayac++;


    echo "Ziyaret Sayisi : $sayac";


    $fp = fopen ($sayac_dosyasi,"w");


    fwrite ($fp,$sayac);


    fclose ($fp);


    ?>


    Ne zaman sayfayi refresh yapsaniz sayfanin uzerindeki sayacin bir arttigini gorursunuz.


    Not : Bu kucuk programda "sayac.dat" isimli dosyanin zaten klasorun icinde oldugu kabul edilmektedir.Eger boyle bir dosya bulunamaz ise program hata verecektir.Bu nedenle Unix/Linux kullanicilari "touch" komutunu kullanarak dizin icinde bir dosya yaratbilirler.


    bash 2.0.4>touch sayac.dat


    veya bir text dosyasi acip "save as" ile bos olarak kaydedin.Kaydederken de "sayac.dat" ismini verin isiniz gorulur.


    Program nasil calisiyor?


    Ilk once "sayac.dat" dosyamiz scriptin bulundugu klasor icinde bulundu ve "yanlizca okunabilir" olarak acildi.


    $sayac_dosyasi = "./sayac.dat";


    if (!($fp = fopen ($sayac_dosyasi,"r"))) die ("Dosya Acilamiyor");




    ikinci satirda "if" komutuyla dosyanin acilmasi sirasinda bir problem oldu mu diye test yapiyoruz.Eger islem basarili olarak gerceklesirse parantezin disina "dogru" olarak cikacaktir.Ama dikkat ederseniz bir unlem isaretimiz var.Bu unlem isareti o "dogru" ifadasini "yanlis" a cevirecek ve boylece program bir alt taki satiri okuyacaktir.Her turlu problemde script "die" komutuyla , "echo" ile verigimiz ifadeyi ekrana basarak sonlanacaktir.




    Boylece yazi dizimizin ilk bolumunu bitirdik.Bundan sonraki bolumde ayrintili olarak "Dosya ve dizin Islemleri" konusuna devam edecegiz.


  • PHP Döngü ve Diziler 2


    "For" Donguleri(for loops)


    For donguleri belirli bir kod parcasinin sizin istediginiz sayi kadar tekrar edilmesini saglar.Bir baska deyisle sizin istediginiz sayi kadar, dongunun "iteration" yani iterasyon islemine tabii tutulmasini saglar.



    for (Sayaci Kur ; Sayaci Test Et ; Sayaca Ekle Veya Sayactan Cikart)


    {


    Bu parantezin icerisindeki kod grubunu uygula


    }





    Yukarida sozu gecen "Sayac" kavrami ile dongunun kac kez calistigini hesapliyoruz.Bu "sayac" ile ayni zamanda eger belirledigimiz sayi kadar cevrim gerceklesmis ise dongumuze son veriyoruz.


    Aslinda "for" dongusu kurmak sartimiz icerisinde tanimladigimiz bu uc ogenin ucunude kullanmak zorunda degiliz.Bizler PHP ogrenmeye yeni basladigimiz icin orneklerimizde bu uc ogeyide kullanacagiz.


    Eger bir satirda kendi ismimizi 10 defa yazdirmak istersek simdiye kadar ogrendigimiz bilgilerle bunu nasil yapariz?


    $Sayac = 0
    while ($Sayac<10)
    {
    echo "Benim adim Serkan !";
    $Sayac =$Sayac+1


    }


    Yukaridaki dongunun kac defa calistigini tahmin edebilirimisiniz?Sizce dongu 9 defa mi calisti?Cunku 10'a gelmeden dongu durdumu?Acaba 11 kez mi calisti cunku biz $Sayac'i 0 dan baslattik ?


    Evet 10 defa calismasini istedigimiz bir dongu icin cok fazla soru degil mi?Aslinda yukaridaki dongu tam olarak 10 defa calisir.


    Iste bu tip sorunlari ortadan kaldirmak icin en guzel yontem "For" donguleri kullanmaktir.




    Simdi ayni islemi birde "for" dongusu kullanarak deneyelim,


    for ($Sayac =1 ; $Sayac<=10; $Sayac++)
    {
    echo "Benim adim Serkan!";
    }


    Gordugunuz gibi dongunun kac defa calisacagi konusunda bir endise duymaniza gerek yok.Hepsi sizin icin $Sayac ile veriginiz sayi kadar isletilecek.


    Bu dongu yapisini kullanirken ornek olarak sayacin kendisinide ekrana yazdirabilirdik,


    for ($Sayac =1 ; $Sayac<=10; $Sayac++)
    {
    echo $Sayac;
    }


    Ciktimiz soyle bir sey olacakti.12345678910


    Not :Burada kullanilan "$Sayac++" ifadesi "$Sayac = $Sayac + 1" ifadesi ile aynidir.Yanlizca bir kisayol olarak bu notasyon kullanilmistir.


    Simdi de bir uygulama yapalim.


    1.Text editorunuzu acin ve asagidakileri yazin.


    <HTML>
    <HEAD></HEAD>
    <BODY>
    <FORM METHOD=POST ACTION="dinamik.php">
    Kac tane cocugunuz var?
    <INPUT NAME="Sayi" TYPE="TEXT">
    <BR>
    <BR>
    <INPUT TYPE=SUBMIT>
    <BR>
    </FORM>
    </BODY>
    </HTML>




    2.Bu dosyayi "dinamik.html" olarak kayit edin.


    3.Yeni bir text dosyaysi acip asagidakileri yazin.


    <HTML>
    <HEAD></HEAD>
    <BODY>
    <FORM METHOD=GET ACTION="dinamik2.php">
    <?php
    for ($Sayac=0 ; $Sayac<$Sayi ; $Sayac++)
    {
    $Oteleme = $Sayac + 1;
    echo "<BR><BR>Lutfen $Oteleme numarali cocugun adini giriniz : <BR>";
    echo "<INPUT NAME=Cocuk [] TYPE=TEXT";
    }


    if ($Sayac==0) echo"Lutfen bir tusa basarak devam ediniz";
    ?>
    <BR>
    <BR>
    <INPUT TYPE=SUBMIT>
    </FORM>
    </BODY>
    </HTML>


    4.Bu dosyayi "dinamik.php" olarak kayit edin.


    5.Yeni bir text dosyasi acip asagidakileri yazin.


    <HTML>
    <HEAD></HEAD>
    <BODY>
    <?php
    $Sayac=0;
    echo "Cocuklarinizin isimleri :";
    do
    {
    echo "<BR><BR>$Cocuk[$Sayac]";
    $Kontrol = "$Cocuk[$Sayac]";
    $Sayac = $Sayac + 1;
    } while ($Kontrol != "");
    if ($Sayac == 1) echo "Cocuk sayisi olarak sifir girdiniz program sonlaniyor";
    ?>
    </BODY>
    </HTML>


    6.Bu dosyayi "dinamik2.php" olaraak kayit edin.


    7."dinamik.html" dosyasini acip bir kac kez programi farkli degerler vererek deneyin

    PHP Döngü ve Diziler 1


    "do while" Donguleri


    "do while" donguleri bir onceki konuda anlatilan "while" donguleri ile benzer islemleri yapmakla beraber bir onemli fark icermektedirler.Dongunun kontrol deyimi ,dongunun sonunda yer almaktadir.Bu durum dongu yapimizin, verdigimiz kosullar ne olursa olsun en az bir kere calisacagini gostermektedir.



    do
    {


    Bu parentezlerin icindeki kod grubunu uygula


    }


    while (sartimiz dogrulaniyorsa); -- geriye don ve tekrar uygula





    Yukarida acik sekilde goruldugu uzere dongumuz "sartlarimiz" ne olursa olsun "do" komutu ile baslayan dongumuzu bir kez isletecek ve "while" ile verilen satirdaki "sartlara" bakacaktir.Eger sart "dogruysa" (true) geriye donerek donguyu ilk yaptigi sekilde "do" ile basyalayan yerden itibaren bir kez daha isletecektir.


    Hemen bir ornek verelim,


    do
    {


    echo ("Kredi limitinizi astiginiz icin son aldiginiz urun sepetnizden cikarildi");
    $AlisverisToplami = $AlisverisToplami - $SonAlinanUrun;
    $SonAlinanUrun = $SonAlinanUrundenBirOncekiUrun;


    }


    while ($AlisverisToplami > $KrediLimiti);


    Yukaridaki ornekte ozellikle bir hata yapilmistir.Hatamiz kodlarla ilgili degil mantikla ilgilidir.Gordugunuz gibi daha kullanicinin limiti asip asmadigina bakmadan ekrana bir uyari yazisini cikarilmasiydi.Belki musterimiz limiti asti belki asmadi.Ama bu sekilde "do while" dongusu ile yazdigimiz programlarda dikkatinizi cekmek istedigimiz nokta da iste buydu.Dongunun kontrol degiskeni dongu calismaya basladigi ilk seferden sonra kontrol edilir.Dolayisi ile her halukarda musteri ekranda bu uyariyi en az bir kere gorecektir.




    Bu dongu yapisini o zaman nerede kullanacagiz?Simdi size bu dongu yapilarinin nasil ve nerede kullanilcagini biraz aciklamaya calisalim.Bir mantiksal ornekle baslayalim,


    do
    {
    Bir sonraki kavsaga kadar arabayi sur;
    }
    while ($Kavsak != 10);


    Ozet olarak eger PHP'nin sizin icin bir islemi kesin olarak yapmasini ve ayni zamanda bir kontrol mekanizmasi ile donatilmasini istiyorsaniz bu dongu tam sizin icin yaratilmis demektir :))


    Bir baska ornekle bu dongunun kullanimini pekistirelim.simdi girdigimiz bir sayinin "asal" sayi olup olmadiginin arastirildigi bir uygulama yazalim.


    1.Text editorunuzu acin ve asgidakileri yazin.


    <HTML>
    <HEAD></HEAD>
    <BODY>
    <FORM METHOD = POST ACTION="asalsayi.php">
    Asalsayi olup olmadigini merak ettiginiz rakami giriniz:
    <INPUT NAME="Sayi" TYPE="Text">
    <BR>
    <BR>
    <INPUT TYPE=SUBMIT VALUE = "Buraya tiklayarak sayinin asal olup olmadigini ogrenin...">
    <BR>
    </FORM>
    </BODY>
    </HTML>


    2.Bu dosyayi "asal.html" olarak kayit edin.


    3.Yeni bir text dosyasi acip asagidakileri yazin.


    <HTML>
    <HEAD></HEAD>
    <BODY>
    <?php
    $Bolunen = 2;
    do
    {


    $Kalan = $Sayi%$Bolunen;
    $Bolunen = $Bolunen + 1;
    } while ($Kalan !=0 AND $Bolunen<$Sayi);


    if (($Bolunen<$Sayi) || ($Sayi ==0)){


    echo ("Sayiniz asal bir sayi DEGIL");
    }


    else {
    echo ("Sayiniz ASAL bir sayidir.");
    }


    ?>


    </BODY>
    </HTML>


    4.Bu dosyayi"asalsayi.php" olarak kayit edin


    5."asalsayi.html" dosyasini acip bir kez programi deneyin.

    PHP Değişkene Değer Atamak

    Problem:Bir degisken icin "ongorulen" bir deger atamak istiyorsunuz.Fakat bu oyle bir sey olmali ki eger kullanici bir seyler girip yollamis ise kullanicinin degeri goz onune alinmali...


    Cevap:Bu durumda "ternary operatoru" olarak isimlerndirilen ?: yazim seklini kullanabilirsiniz.(Tabi ki her zaman icin if else yapilari kullanilabilir ama bu operator ile hem kodun okunabilirligi artiyor hemde ozgun bir yazilim saglaniyor.)


    durum ? dogru_ise_bunu_yap : yanlis_ise_bunu_yap


    <?php
    /*
    Eger kullanici ilk argumenti($dosyaadi) saglamis ise o kullanilacak degilse ongulen olarak STDIN (php://stdin) alinacak.(STDIN hakkinda daha fazla bilgiyi manualden alabilirsiniz.)
    */


    $dosyaadi = isset ($arg[1]) ? $arg[1] : "php://stdin";


    $dosyabaglantiac = @fopen ($dosyaadi, 'r') or die ("Dosya okumak icin acilamiyor");


    while (!@feof ($dosyabaglantiac)) {
    $satir = @fgets ($dosyabaglantiac, 1024);
    print $satir;
    }
    @fclose ($dosyabaglantiac);
    ?>


    Yukaridaki kod grubu icin anlamayanlara bir kez de bilinen klasik yontemle programi yazarak gosterelim.Ilk satirimizdaki kod icin bilinen if ve else yapilarini kullaniyorum.


    <?php
    if (isset ($arg[1])) {


    $dosyaadi = $arg[1];


    } else {
    $dosyaadi = "php://stdin";
    }
    .......
    ............
    ?>



    PHP Çerezler

    Cookies (Cerez Dosyalari):


    Kucuk,hafif,portatif oldukca hizli bir veri depolama bicimi...Iste bunun ismi ne yazikki Turkce'de "cerez dosyasi".(Onlarin kulturunde kurabiye bizim kulturumuzde cerez agir basiyor herhalde..)


    Biraz detaya girmek gerekirse, istemci-server arasindaki veri iletisiminde bu "cerez dosyalari" istemci tarafin tarayicisinda(browser'inda) kucuk capli verileri saklamak icin gelistirilmistir.


    Kullanim alani: Kucuk,fakat oldukca yardimci olabilecek "kritik" olmayan verilerin saklanmasidir.Buna en iyi ornek sitenin gorunumunu istedigi gibi degistiren kullanici icin ayarlarin kendi bilgisayarinda,kullandigi tarayicinin ozel bir alaninda "cerez dosyasi" tabir edilen kucuk dosyalarda saklanmasdir.


    Nasil Kullanilir?


    Bunu kesin kurallara dayandirarak aciklamak mumkun degil cunku ziyaretcinin kullandigi browser'dan browser'a degisiklik gostermektedir.


    Simdi size anlatacaklarimiz "cerez dosya"larinin kullanimina iliskin genel kurallardir.



  • "Cerez Dosyasi" bir parca verinin, (degisken ismi ve o degiskene ait deger) saklanmasi icin istemci tarafin hard diskinde browser kontrolunde yaratilan dosyadir.
  • "Cerez Dosya"lari ile istemci-tarafinda veri saklanabilmektedir.
  • Web siteleri genellikle kendi "Cerez Dosya" larini yeniden duzenleyebilir veya islem yapabilirler.
  • Eger minumum guvenlik kriterleri saglanmis ise,"Cerez Dosya"si yanlizca ilk anda gonderilen server tarafindan tekrar erisilebilirler.

    Istemci bilgisayar, "cerez dosyasi" kullanan bir web sitesini goruntulemeye calistigi zaman,Web Server istemci tarafa (ki bu genellikle kullanicinin browser programi olur) bir parca veriyi daha sonra kullanilmak uzere saklamasi icin verir.Bunun ardindan artik o veriden istemci taraftaki bilgisayar sorumludur."Cerez Dosyasi" destekleyen browserlar bu islemi, "cerez dosya"sini gonderen sitenin ismini dosya ismi olarak kullanarak yaparlar.


    Bu veriye yapilacak daha sonraki isteklerde buradan alinan bilgilerin bir kopyasi Web Server'a gonderilir.Bu veriler daha "cerez dosyasi" yaratilirken belirledigimiz omur sureleri dolana kadar istemci tarafin bilgisayarinda saklanir.Omur sureleri dolan "cerez dosyalari" sistemden silinirler.


    "Cerez dosya"lari yaratilirken server tarafi,istemci tarafa bu verileri ne kadar sure ile saklamasi gerektigini bildirir.Bu bildirim temel olarak "saniye" cinsinden bir rakam vermek suretiyle yapilir.


    Eger belirtilen sure "0" ise istemci bilgisayarda bu "cerez dosya"si kullanici browser penceresini kapatana kadar saklanir ve sonra hard disketen silinmesi suretiyle yok edilir.


    Elbette istemci tarafta saklanan veriler icin,server tarafindan bir kontrol soz konusu degildir.Bir defa yaratildiktan sonra server tarafindan bu dosyalar uzerindeki tum hakimiyet kaybolur.Kullanici bu dosyalarin icinde saklanan verileri degistirebilir,duzenleyebilir,silebilir veya tumunu oratadan kaldirabilir.Bu durumda, bir web prgramcisi olarak istemci taraftaki verilere supheci yaklasmak ve kritik olan verileri bu sekilde saklamak yolundan kendimizi ali koymak gereklidir.


    ONEMLI:Web Serverlar "cerez dosya"larini HTTP header olarak gondermektedir. Bu nedenle herhangi bir HTML ciktisi goruntulenmeden once istemciye gonderilmelidir.(Istemci tarafta ayni sekilde server istedigi zaman bu "cerez dosya" sini HTTP Header olarak gondermektedir.)


    Istemci taraf hangi "cerez dosya"sinin hangi web sitesinden geldigini bilmektedir.Bu nedenle eger www.php.net sitesini goruntuluyorsaniz kullandiginiz browser www.turk-php.com sitesinden alinmis bir "cerez dosya" sini asla bu siteye gondermeyecektir.




    PHP ve Cerez Dosyalari


    PHP en gelismis scripting dillerinden birisidir.Bu nedenle cok guclu bir "cerez dosyasi" destegi ile beraber gelmektedir."Cerez Dosyasi" degiskenlerini yaratmak icin setcookie () fonksiyonu kullanilmaktadir.Bu fonksiyon ayni header() fonksiyonunda oldugu gibi kullanicinin bilgisyarinda herhangi bir HTML goruntulenmeden once kullanilmalidir.


    setcookie () fonksiyonu nasil kullanilir?


    Bu fonksiyon toplam alti tane parametre almaktadir.bunlarda yanlizca ilk ucu en onemli olanlaridir.



  • Degiskenin ad degeri


  • Degiskenin sakladigi deger
  • UNIX Timestamp (Olusturulan "cerez dosyasi" icin omur degeri.Saniye olarak.)

    Not: UNIX Timestamp integer olarak 01/01/1970 gece yarisindan baslayan ve verilen zaman araligina kadar gecen zamanin saniye olarak sayilmasidir.O andaki gecerli zamani bu formatta gormek icin time () fonksiyonunu kullanabilirsiniz.Eger simdi bulundugumuz andan itibaren 1 saat icinde omru bitecek bir "cerez dosyasi" yaratmak istersek bunu en kisa sekilde time ()+3600 yazarak saglayabiliriz.




    Diger uc parametre degeri genel olarak kullanilmamaktadir.Burada size bilgi olmasi acisindan aciklanmistir.



  • "Cerez dosyasi" ile ilgili web sitesi icin tanimlanan yollar...Ornek vermek istersek eger bu parametreyi "/dorduncu/parametre/icin/yol/bir" olarak ayarlarsaniz sitenizden "/dorduncu/parametre/icin/yol/iki" sayfasi icin bu "cerez dosyasi" istemci tarafindan gonderilmeyecektir.


  • "Cerez Dosya"sinin uygulanacagi "domain" adi degeri.Eger web Server birden fazla domain adina sahipse bu parametreyi kullanamak uygun olacaktir.


  • Integer olarak "secure" degeri.1 olarak ayarlandigi zaman bu "cerez dosyasi" yanlizca SSL-sifrelenmis sayfadan istendigi zaman gonderilecektir."Cerez dosyasi" kullanici bilgisyarinda herhangi bir sifreleme kullanilarak saklanmaz.



    Tum bu bilgilerin isiginda bir ornek yapmak istersek,asagida yazacagimiz format genel olarak butun ihtiyaclariniza cevap verecek seviyededir.


    setcookie ("fontozellikleri", "", time()+3600);


    Yaratilan bu "cerez dosyasi" icinde saklanan verilere erismek,yukaridaki yaratma isleminde bile kolaydir.Cunku bu veriye ulasirken hic bir sey yapmaniza bile gerek YOKTUR.


    Butun POST degiskenlerinde oldugu gibi yanlizca adini yazip kullanmaniz yeterlidir.PHP otomatik olarak global domaine ait "cerez" degiskenleri ile ilgili degerleri yerlestirmektedir.Ornek vermek gerekirse "cerez dosyasi" icinde "fontozellikleri" ismi ile saklanan degisken,scriptler icinde global degisken olarak $fontozellikleri ismi ile kullanilabilir olarak hazir olacaktir.


    Cerez dosyasini nasil silerim?


    "Cerez Dosya"sini silmek icin bir kac yol bulunmaktadir.Elbette istemci bilgisayari kontrol eden kisi nereye bakmasi gerektigini biliyorsa her zaman icin bu dosyalari duzenleyebilir veya silebilir.Buradaki teknikler server tarafindan bu "cerez dosya" larini nasil sileceginize iliskin bilgileri icermeketedir.





  • "Cerez dosya"sinin omrunu sifirlayin.Bunu yapmak icin gecmisteki bir tarihi vererek "cerez dosyasini" yeniden yaratamakta cerezi silmek icin kullanisli bir cozumdur...

    setcookie ("num", "0", time()-9999);



  • "Cerez dosya"sini yanlizca degisken ismini belirterek tekrar yaratin.

    setcookie ("fontozellikleri");


    bu durumda "cerez dosyasi" gecersiz kabul edilecek ve silinecektir.




    Simdi ornek bir uygulama yapalim.


    1.Text editorunuzu acin ve asagidaki kodlari yazin.


    <?
    //cerezdosyasi_test.php


    //Once POST degiskenlerimizi kontrol ediyoruz.Buna bagli olarak cookie koyuyoruz.
    if ($tip_secim) setcookie ("font[tip]", $tip_secim, time()+3600);
    if ($boyut_secim) setcookie ("font[boyut]", $boyut_secim, time()+3600);


    //Font tipi ve boyutu icin HTML formunda kullanilmak uzere iki dizi hazirliyorum.


    $tipler = array ("arial","helvetica","sans-serif","courier");
    $boyutlar = array ("1","2","3","4","5","6","7");


    echo "<HTML><HEAD><TITLE>Cerez dosyalari icin ornek makale</TITLE></HEAD><BODY><DIV ALIGN='CENTER'>";


    //Burada iki tane liste kutusu yaratiyoruz.Kullanici font ve boyutu buradan seciyor.


    echo "<FORM METHOD=POST>";
    echo "Hangi yazi fontunu kullanmak istersiniz? ";
    echo "<SELECT NAME='tip_secim'>";
    echo "<OPTION SELECTED VALUE=' ' >Ongorulen</OPTION>";
    foreach ($tipler as $diziyilisteyekoy) echo "<OPTION>$diziyilisteyekoy</OPTION>";
    echo "</SELECT><BR><BR>";


    echo "Hangi yazi boyutunu kullanmak istersiniz? ";
    echo "<SELECT NAME='boyut_secim'>";
    echo "<SELECTED VALUE=' ' >Ongorulen</OPTION>";
    foreach ($boyutlar as $diziyilisteyekoy) echo "<OPTION>$diziyilisteyekoy</OPTION>";
    echo "</SELECT><BR><BR>";


    echo "<INPUT TYPE=SUBMIT>";
    echo "</FORM>";


    //Son olarak sonuclari ekrana yaziyoruz.Buradan kullanici sakladigi degerleri gorebiliyor.


    echo "Cerez dosyalariniz diyorki:<BR>";
    echo "<FONT ";
    if ($font[tip]) echo "FACE=$font[tip] ";
    if ($font[boyut]) echo "SIZE=$font[boyut] ";
    echo ">";


    echo "$font[tip] = $font[tip]<BR>";
    echo "$font[boyut] = $font[boyut]";


    echo "</FONT><BR>";


    echo "Form degiskenleriniz diyorki:<BR>";
    echo "<FONT ";
    if ($tip_secim) echo "FACE = $tip_secim";
    if ($boyut_secim) echo "SIZE = $boyut_secim";
    echo ">";
    echo "$tip_secim = $tip_secim<BR>";
    echo "$boyut_secim = $boyut_secim<BR>";
    echo "</FONT>";


    echo "</DIV></BODY></HTML>";


    ?>


    2.Bu dosyayi "cerez.php" olarak kayit edin.


    3.Browser ile sayfayi goruntuleyin.
  • Java Proje Geliştirme


    Javaproje gelistirme.. Anethaber grubunda ozellikle java'ya yeni baslayanlarin takildigi noktalardanbirisi bir java projesinin nasil olusturudugu seklinde. Bu konuda basit birreferans olmasi icin cok basit bir sekilde bir java projesinin nasil baslatilacaginianlatmaya calisacagim.
    - Java projelerinizi belli bir dizinde toplayin. Mesela windows icinc:\javaproje gibi. bu konuda kafaniza gore takilabilirsiniz. Linux icin /homealtinda bir dizin acabilirsiniz. Bu ornekte c:\javaproje actigimizi varsayiyorum.
    - projemiz icin bir dizin olusturalim. Projenin adi "deneme" olsun.c:\javaproje\deneme olustu. bu dizine "Kok dizini" adini veriyorum.
    - Projemizin kaynak kodlarini koymak icin Kok dizini altinda "src"adinda yeni bir dizin olusturalim.
    - Deneme icin bir editor acip (jedit ya da gelismis herhangi bir editor,olmazsa notepad) asagidaki basit sinifi olusturalim.

    public class BenimSinif
    {
        public static void main(String[] args)
        {
            System.out.println("MerhabaDunya");
        }
    }


    - Bu dosyayi  kaydetmeden once paket adi secimini yapalim. Sinifimizibelirli bir paketin altina koymak proje acisindan onemli cunku bu isimsayesinde sinifimiz dunyadaki ayni isimli diger siniflardan ayrilmis oluyor.paket adi "org.ff.temel" olsun. Temel java denemeleri ile ilgilisiniflari bu paket altinda toplayacagiz. Editorde henuz kaydetmedigimizyukaridaki kodun en basina

    package org.ff.temel;


    ekleyelim. Kaydetmeden once yapmamiz gereken sey paket ile ayni isimde dizinlerolusturmak. normalde gelismis java IDE'leri (Eclipse , IDEA gibi) bu dizinolusturma islemini otomatik yapiyor, ama biz elle yapalim simdilik. yapacagimizsey "src" dizini altinda /org/ff/temel dizinlerini olusturmak. Artikdosyayi kaydetmeye haziriz. Sinifi  BenimSinif.java   ismi ile/src/org/ff/temel dizini altina kopyaliyoruz. Dikkat, dosya adi sinifi adi ileayni olmalidir.

    - sira geldi derlemeye. Derlemeden once derleme sonucunda olusacak"class" dosyalarinin ayri bir yerde yer almasini saglamak icin Kokdizininde "classes" (isterseniz "bin","out" ya dakafaniza gore bir isim secebilirsiniz) adinda bir dizin olusturalim. Dahakonsolda (Windows icin Start->run->cmd) kok dizine gidip asagidaki satiriyazalim.

    javac -d classes src\org\ff\temel\*.java


    Sistem bu komutun ardindan hic bir sey demeden calisacaktir (java dosyanizdahata olmadigini ve konsodan javac erisiminizin oldugunu varsayiyorum) "-dclasses" ile java derleyicisine olusan derlenmis java dosyalarinin (classuzantili) classes dizini altina yerlestirilmesini, "src\org\ff\temel\*.java"ile src\org\ff\temel dizini altindaki tum java dosyalarinin derlenmesiniistedigimizi soyluyoruz.

    simdi kok dizini altindaki /classes dizinine girerseniz otomatik olarakorg/ff/temel dizinlerinin ve BenimSinif.class dosyasinin olustugunugoreceksiniz.
    Simdi calistiralim. Gene kok dizine gidin once. daha sonra asagidaki komutuyazip calistirin

    java -cp classes org.ff.temel.BenimSinif

    Komut satirinda "Merhaba Dunya"  yazdigini goreceksiniz.Yukaridaki komutu aciklayayim "java" java programlarini calistirmakicin kullanilir. "-cp" java'ya "benim siniflarin yerinisoyleyecegim, hazir ol.." demek. "classes" ile benim siniflar"classes" dizini altinda demek. "org.ff.temel.BenimSinif"ise calistirilacak "main" metodunun hangi sinifta oldugunu isaretediyor. paket adini yazmak ve dosya sonuna "class" yazmamakgerekiyor. Eger cevre degiskenleri icinde "CLASSPATH" tanimlanmis isebazi javacilar "-cp classes" yerine "-cp .;classes" yazmayionerir ama ben acikcasi cevre degiskenleri icinde classpath tanimlamaya coksicak bakmiyorum. Bu kisisel bir secim, yani illaki oyle yapacaksiniz diye birsey yok.

    Simdi baskasinin yazdigi bir java kutuphaneisnin bu projeye nasil ekleneceginiincelyelim.

    Once ufak bir jar bulalim. Jar aslinda class dosyalarinin sIkistirilmis halidir.Gecenlerde gozume ilisen bir proje vardi onu kullanalim. Su adresten "simple-log.jar"dosyasini cekin. Bu kutuphane basit logging yani kayit tutma ihtiyaclari icingelistirilmis mini bir kutuphane. Boyu sadece 17KB. Jar dosyasini Kok dizinialtinda olusturacaginiz "lib" dizini altina koyun. BenimSinif.java'ya bu kutuphaneden bir ekleme yapalim. Yani kod su sekilde.

    package org.ff.temel;

    import org.grlea.log.SimpleLogger;
    import org.grlea.log.DebugLevel;

    public class BenimSinif
    {
        private static final SimpleLogger log = newSimpleLogger(BenimSinif.class);
        public static void main(String[] args)
        {
           log.setDebugLevel(DebugLevel.L5_DEBUG);
            log.debug("Debugyapiyorum....");
        }
    }


    Daha sonra src dizini altinda "simplelog.properties" adinda bos(tamamen bos..) bir dosya olusturun ve tekrar konsoldan kok dizine gidip budefa asagidaki sekilde yazip kodu derleyelim.

    javac -classpath lib/simple-log.jar -d classes src/org/ff/temel/*.java

    Bunun oncekinden farki "-classpath lib/simple-log.jar" eklentisininolmasi. Eger bunu eklemezsek java kod icinde yer alan "importorg.grlea.log.SimpleLogger;"  satirinda sasirir. Cunku SimpleLoggersinifinin nerede oldugunu bilmiyor.. Bunun icin java derleyicisine "bak, lib dzini altindaki simple-log.jar dosyasini aklinda tut,derleyecegim java dosyalari o jar dosyasindaki sIkistirilmis class'larikullaniyor olabilir ona gore" diyoruz. Eger birden fazla jar dosyasiolsaydi bunu "lib/simple-log.jar;lib/kutuphane.jar" seklinde arkaarkaya ulayarak derleyiciye bildirebilirdik. Bu arada illa"-classpath" yazmak gerekiyor bundan once, kisaltilmis hali -cpburada sokmuyor.

    Calistirma sirasinda da dikkatli olmamiz gerekiyor, kok dizine gidip asagidakisekilde yaziyoruz:

    java -cp classes;lib/simple-log.jar org.ff.temel.BenimSinif

    Gordugunuz gibi calistirirken de yazilimimizda kullanilan dis jar kutuphanesinijava'ya soyluyoruz. Cikti asagidaki gibi olabilir:

    Wed 22/52/2004 10:52:04.628|   |main|BenimSinif|Debugyapiyorum....

    Kayit tutma araclari yazilim gelistirmede onmeli bir yere sahiptir. Bundan cokdaha gelismis (Log4j gibi) araclar kullanilabilir ama bu konunun disinda..Sadece ornegin kucuk olmasi icin simple-log.jar secildi.

    Sonucta dizin yapimiz su sekilde olustu:

    C:\javaproje\deneme
                   |
                  src -- org - simplelog.properties
                   |      |
                   |     ff  
                   |      |
                   |     org
                   |      |
                   |     temel - BenimSinif.java
                   |     
                classes -- org - simplelog.properties (otomatik olusur)
                   |        |
                   |       ff (otomatik olusur) 
                   |        |
                   |       org (otomatik olusur)
                   |        |
                   |       temel - BenimSinif.class (otomatikolusur)
                   |
                  lib -- simple-log.jar



    Sunu belirteyim ki gelismis IDE'ler ile butun bu islemler cok daha kolayhalledilir. Ve bunu ogrendikten sonra tavsiyen Eclipse, Netbeans ya da IDEAgibi IDE'leri kullanarak ayni projeyi bu defa arayuz kullanarak olusturmayacalisin. Ne kadar fark oldugunu goreceksiniz. Kutuphanelerin eklenmesi,paketlerin olusturulmasi ya da programin calistirilmasi cok daha kolay sekildegerceklestirilebilir.
    Bundan sonraki yazida ant ile bu islerin daha kolay nasil yapilabileceginianlatabilirim..