![]() |
|
|||||||
| Web Geliştirme Dilleri İnternet sitesi geliştirme için kullanılan araçlar ve programlama dilleri... ASP & ASP.NET & PHP & CSS & HTML & SQL & Java Script |
![]() |
|
|
Konu Araçları |
|
|
#1 (permalink) |
|
I'm REAL ?>
![]() Katılma Tarihi: Şub 2006
Nereden: Bursa/es-es
Yaş: 23
Mesajlar: 1,768
|
Programlamada Hata Tipleri
Yazim Hatalari Calisma Zamani Hatalari Mantik Hatalari Yazim Hatalari Konusma dillerinde oldugu gibi programlama dillerinde de bazi yazim kurallari ve yapilar vardir.Her programlama dillinde oldugu gibi PHP icerisinde de daha onceden belirlenmis komut yapilari ve yazim teknikleri vardir.Konusma dillerinde hata yapsaniz dahi karsinizdaki sizin ne dediginizi anlayabilir,fakat programlama dillerinde yapacaginiz kucuk bir yanlis hata mesajinin ekrana gelmesini saglar. Yazim kurallarina ornek PHP de her satirin bitiminde noktali virgul isaretinin kullanilmasi gosterilebilir.Bir baska ornek ise degikene bir duzyazi tipinde veri atarken mutlaka veriyi tirnak isaretlerinin arasina yazmalisiniz... Yazim hatasi olusturmak icin asagidaki gibi bir program yazin.program toplam uc satirdan olusuyor ve ikinci satirinda asil isi yapan komut var : Ornek 1 : <?php $tarih = date (m.d.y'); ?> Boyle bir kodun ciktisi asagidaki gibi olur : Parse error: parse error in c:\nusphere\apache\nsdocs\pro_hatasi1.php on line 2 Goruldugu gibi ikinci satirda bir hata mesyadana geldigi acikca belirtilmektedir. Simdi de ayni kodu asagidaki gibi degistirin : <?php $tarih = date ('m.d.y); ?> Simdi program ciktisi asagidaki gibi olacaktir : Parse error: parse error in c:\nusphere\apache\nsdocs\pro_hatasi2.php on line 4 Su anda hatanin dorduncu satirda oldugu soylenmektedir.Bu nasil olur? Cunku program zaten hepsi uc satirdan olusuyor. Eger bir komutta bu sekilde bir tirank hatasi yaparsaniz ve tum programiniz 1000 satirdan olusuyorsa buyuk ihtimmalle asagidaki gibi bir hata alirsiniz ve zamaninizin cogu bu hatayi hangi satirda aradiginizi yapmakla gecer ![]() Parse error: parse error in c:\nusphere\apache\nsdocs\pro_hatasi2.php on line 1001 Sonuc olarak yazim hatalari en kolay bulunup yok edilen hatalar olarak degerlendirilir. Calisma Zamani Hatalari Konuyu anlatabilmek icin hemen giriste bir ornek veriyorum.Tahmin ediyorum hepiniz ornege bakarak bu tip hatalar ile neyi kastettigimizi anlayacaksiniz : <?php include ("dosyaadi.php"); ?> Evet yukaridaki kod parcasi yuzde yuz hatasiz olmasina ragmen calisma zamaninda ilgili dosya yerinde bulunamaz ise cok basit bir hata mesajinin uretilemsine neden olabilir : Warning: Failed opening 'dosyaadi.php' for inclusion (include_path='') in c:\nusphere\apache\nsdocs\pro_hatasi3.php on line 2 Yukaridaki "include" komutu ile bazi dosyalar komple programin icine eklenebilmektedir.Eger eklenecek program yerinde bulunmazsa bir hata mesaji ueretilir. Bir baska calisma zamani hatasi ornegi "sifira bolunme" olayidir.Matematikte bir sayinin sifira bolunmesi tanimsizdir.Bu nedenle eger programda bir sayiyiy sifira bolmeye tessebbus ederseniz hata mesaji uretilir : <?php $i=10; $j=0; $k=$i/$j; ?> Yaratilacak hata mesaji asagidaki gibidir : Warning: Division by zero in c:\nusphere\apache\nsdocs\pro_hatasi4.php on line 4 Mantik Hatalari Mantik hatalari bulunmasi en zor programcilik hatalaridir.yazim veya yapi olarak dogru oldugu halde programcinin istedigi gorev yerine baska islevler yerine getiren kod parcalari bunlara ornek verilebilir.Tarihte yapilan butun buyuk yazilim hatalari bu cesit hatalardir. Ornek : <?php for ($i=0; $i<10; $i++); { echo "Bu bir deneme mesajidir <BR>"; } ?> Evet kodun kendisinde hata olmamasina ragmen (PHP yukaridaki kod ile ilgili herhangi bir sikayette bulunmaz.) kod istenilen sekilde davranmayacaktir.Dikkat ederseniz PHP deki yazim kuralini uygulayrak her biten satira bir noktali virgul ekledim.Bu sebeple dongunun "echo" komutunun oldugu satirla olan baglantisini kesmis oldum.Boyle bir programin ciktisi asagidaki sekilde olacaktir : Bu bir deneme mesajidir Aslinda asagidaki gibi bir ciktinin ekrana gelmesi istenmektedir : Bu bir deneme mesajidir Bu bir deneme mesajidir Bu bir deneme mesajidir Bu bir deneme mesajidir Bu bir deneme mesajidir Bu bir deneme mesajidir Bu bir deneme mesajidir Bu bir deneme mesajidir Bu bir deneme mesajidir Bu bir deneme mesajidir Hata bulma tekniklerinde bir degiskenin, programin belirli bir kisminda sahip oldugu degerini bilmek gercekten cok onemlidir.Boylece programin sizin istediginiz sekilde calisip,calismadigini kontrol etme firsatiniz dogar. Bu anafikirden hareketle sayfamiza gelen degiskenlerin tasidigi degerleri HTML sayfasinda yorum haline getirip yazacak (Boylece gercekten sayafada goruntulenmedigi halde sayfanin HTML kodunda yer alacak.) kucuk bir hizmet/hata bulma yazilimi hazirlayalim : <?php /* Oturum numarasi alabilmek ve bunu ornekte gorebilmek icin oturumu baslatiyorum Bunun programin isleyisinde bir etkisi yoktur. */ session_start; /* Bu sayafaya ulasan butun HTML degiskenlerini aliyor onlari isliyor ve sonunda bir HTML yorumu olarak sayfanin kaynak kodunda gosteriyoruz. */ echo "\n<!-- Degisken Degelerine Bakis -->\n\n"; echo "<!-- GET DEGISKENLERI -->\n"; echo "<!-- ". degerleri_goster($HTTP_GET_VARS) ."-->\n"; echo "<!-- POST DEGISKENLERI -->\n"; echo "<!-- ". degerleri_goster($HTTP_POST_VARS) ."-->\n"; echo "<!-- SESSION (Oturum) DEGISKENLERI -->\n"; echo "<!-- ". degerleri_goster($HTTP_SESSION_VARS) ."-->\n"; echo "<!-- COOKIE (Cerez) DEGISKENLERI -->\n"; echo "<!-- ". degerleri_goster($HTTP_COOKIE_VARS) ."-->\n"; echo "Bu sayafaya gonderilen degisken isimlerini ve degerlerini gormek icin \n"; echo "sayfanin HTML kaynak kodunu goruntuleyiniz."; /* degerleri_goster fonksiyonu argument olarak bir dizi ismi almaktadir. boylece fonksiyona gecirilen dizideki tum elementler teker teker indis-deger ikilisi seklinde listelenmektedir.Bizler bu fonksiyonun ciktisindan o dizi ile ilgili tum bilgileri sayfanin icinde bir HTML yorumu olarak gorebilmekteyiz. */ function degerleri_goster($array) { if (is_array($array)) { $eleman_sayisi = count($array); $cikti = " "; if ($eleman_sayisi) { $sayac = 0; $cikti .="{ "; //Her elementin indis ve degerini ciktiya ekle. foreach ($array as $var => $deger) { $cikti .= "$var = $deger"; if ($sayac++ < ($eleman_sayisi-1)) { $cikti .= ", "; } } $cikti .= "}"; } return $cikti; } else { //Eger dizi degilse, return $array; } } ?>
__________________
|
|
|
|
![]() |
| Şu Anda Konuyu İnceleyen Aktif Kullanıcılar: 1 (0 üye ve 1 misafir) | |
| Konu Araçları | |
|
|
Benzer Konular
|
||||
| Konu | Konuyu Başlatan | Forum | Cevaplar | Son Mesaj |
| OKS 'de Büyük Hata | emregrlk | Haberler & Gündem & Tartışma | 0 | 14.07.2007 20:43 |
| Php de Hata Bulma... | staticiation | Web Geliştirme Dilleri | 0 | 06.06.2007 14:54 |
| msn de hata | saban.kenar | Genel | 11 | 11.04.2007 12:57 |
| hata | OyeR | Donanım | 0 | 09.09.2006 14:47 |
| msn hata | bilvivi | Araçlar | 6 | 03.08.2006 16:21 |