2008 Ramazan Özel Bölümü

Geri Dön   Forum Ti > Programlama Dilleri ve İnternet > Web Geliştirme Dilleri
Üye Ol Bloglar Üye Listesi Takvim Forumları Okundu İşaretle

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

Cevap
 
Konu Araçları
Eski 08.06.2007   #1 (permalink)
 
staticiation  Görüntü Resmi
 
Katılma Tarihi: Şub 2006
Nereden: Bursa/es-es
Yaş: 23
Mesajlar: 1,768
Varsayılan PHPde Hata Bulma Tekniklerine Yaklaşım ve Basit Bir Hata-Avlama Yazılımı Geliştirmek.

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;
}
}



?>
staticiation Şuanda Forumda Değil   Alıntı yaparak cevapla
Cevap


Ş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


Şu anki forum saati: 11:24.


cnt hizmet sağlayan firma
ForumTi.com'un yapımı ve yayınlanması CNT'ye aittir.
Sitedeki içerikleri foruma ücretsiz şekilde üye olabilen ziyaretçiler oluşturur. Bu içeriklerin sorumluluğu yazana aittir.
Eğer yasak ve aykırı içerik tespit edilirse site yöneticilerine bu konular bildirilir ve kaldırılır. Site yönetimi haberdar edildiğinde sonuç alınamaz ise servis sağlayıcı CNT'ye bildiride bulunabilirsiniz.
vBulletin® v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd. Search Engine Friendly URLs by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258