Giris :
PHP'nin yuklenmesini bir kac adimda gerceklestirmistik.
Bunlardan birincisi web sayfalarimizi internet'te sunacak
bir "Web Server" programinin sisteme yuklenmesi ardindan da
"PHP" nin yuklenmesi ayrintili sekilde aciklanmisti.PHP ile
yazilmis programlarin istemci bilgisyarda gosterimine gecmeden
once,birkac temel terimi aciklamak istiyorum.
Ilk olarak "request-response" yani "istek-cevap" terimlerini
inceleyelim.
Bir internet kullanicisi herhangi bir sayfaya ulasmak istediginde
aslinda o sayfanin yayinlandigi "Server" yani sunucu bilgisayara
bir "istek" gonderir.Bu istek "Sunucu" bilgisayarda islenir
ve "cevap" gonderilir.Tum bu iliski "client-server" iliskisi
olarak yani "istemci-sunucu" iletisimi olarak adlandirilir.
Simdi'de bu iletisimin saglanmasinda kullanilan protokole
yani"TCP/IP" protokolune kisaca goz atalim.
Istemci bilgisyar kullandigi tarayici program ile sayfaya
ulasmak istediginde tarayici program bu bilgiyi isleyerek
TCP (Transmision Control Protokol) yardimiyla Server'a iletir.TCP/IP
nin en guzel yani bilginin (Bilgi Paketleri veya IP paketleri)
cok hizli ve kolay olarak tekrar yonlendirebilmesidir.Tarayici
program paketleri Networke gondermeden once baska bir protokol
"HTTP" (Hyper Text Transfer Protocol)yardimiyla etiketler.
Kisaca olaya netlik kazandirmak istersek TCP/IP yi Posta Servisine
HTTP'yi ise mektuplarin uzerindeki pul ve adres etiketine
benzetebiliriz.
Biraz ayrntiya girelim ve genel olarak bir HTTP istegi ve
HTTP cevabi hangi ogelerden olusur inceleyelim.
Hepimiz bir internet sayfasi goruntulemek istedigimizde kullandigimiz
browser bir HTTP istegi hazirlayarak bunu sayfanin yayinlandigi
server'a gonderir.Bu istek asagidaki ogelerden olusur.
Her HTTP isteginin ilk satiri uc parca bilgi icerir.
HTTP komutu bilinen
adiyla "method"
Istegimizin hangi
sayfa icin oldugu.(Dosyanin server uzerindeki yolu)
Kullandimiz bilgisyarda
yuklu olan HTTP'nin versiyonu.
Bir ornek vermek istersek,ilk satirmiz su sekilde olacaktir.
GET /istenilensayfa.htm HTTP/1.1
Genel olarak kullanilan methodlarin bazilari soyledir.
GET: Bu HTTP komutuyla servera yazdigimiz URL icin istekte
bulunuyoruz.
HEAD : GET ile aynidir fakat herhangi bir data icermez.
POST : Bu istek komutu ile servera datanin bir kisminin
HTTP body icinde yer alacagini soyluyoruz.HTTP body si icinde
giden bilgi daha sonra server uzerindeki data handling (veri
isleme)programi tarafindan islenecektir.(Web server uzerinde
yer alan data isleme)
HTTP tarafindan desteklenen bir cok degisik method komutu
bulunmaktadir.Bunlardan bazilari soyledir :
PUT,DELETE,TRACE,CONNECT
Daha detayli bilgi almak icin RFC 2068 dokumanini okuyabilirsiniz.(www.rfc.net)
HTTP Header (HTTP Baslik)
Ikinci gonderilen veri biti HTTP Header'dir.Hangi tur dokumanlarin
istemci tarafinda goruntulenebilecegini ve browser tipi
gibi istemci ile ilgili detaylari icerir.Uc kisimdan olusur.
General : Istemci
veya server ile ilgili bilgi icerir.
Entity : Istemci
- server arasinda gonderilen data ile ilgili bilgi icerir.
Request : Istemci
tarafi ile ilgili konfigurasyon ve hangi tur dokumanlarin
kabul adilip edilemeyecegi bilgisini icerir.
Ornek bir HTTP Header asagidaki gibidir.
Accept: */*
Accept-Language : en-us
Connection : Keep-Alive
Host : www.turk-php.com
Referer : http://www.turk-php.com/index.php?sayfa=onerensayfa
User-Agent : Mozilla (X11; I ; Linux 2.0.16 i686)
HTTP Body(HTTP Govdesi)
Eger istek yapilirken POST metodu kullanilirsa istek icerisinde
bir kisim data HTTP Body icerisinde gonderilir.Diger butun
hallerde istek sirasinda HTTP Body bostur.
HTTP Response(HTTP Cevap)
Cevap satiri iki bit bilgi icerir :
HTTP Versiyonu
HTTP isteginin
nasil yorumlandigi.Istek kabul edildi ise basarili, degilse
basarisiz seklinde deger alir.
Ornek bir server cevabi su sekildedir.
HTTP/1.1 200 OK
Bu ornekte istek kabul edilmistir.200 durum kodudur ve OK
in numerik karsiligidir.
Bazi HTTP durum kodlari soyledir.
100-199 Bilgi iceren kodlar.Gonderilen HTTP isteginin islenmekte
oldugunu istemci tarafa gondermek icin kullanilir.
200-299 Basarili istekler icin server bu kod araligindaki
sayilari kullanarak cevap verir.
300-399 Server gonderilen istekle ilgili verilerin daha
islenmedidigini istemciye bildirmek icin bu kod araligindaki
kodlari kullanir.
400-499 Istemci hatalari ile ilgili kodlar.(Hani ulasmak
istedigimiz sayfaya gitmek icin yanlis bir URL yazdigimizda
aldigimiz HTTP 404 Hata mesaji gibi)Server bilgiyi basarili
sekilde almis fakat bilgi yanlis veya olmayan bir sayafaya
isaret ediyor.
500-599 Server tarafi ile ilgili hatalar.(Gonderilen istek
durum olarak iyi gozukuyor fakat yazdigimiz kodlardaki bir
hata yuzunden server veriyi isleyemiyor olabilir.Server
uzerinde dosya paylasim izinleri ihlal ediliyor olabilir
vb.)
HTTP Header (HTTP Baslik):
HTTP cevap basligi (header) daha once inceledigimiz "istek
basligi" ile benzerdir.
General : Isemci
veya servera ozel olmayan genel bilgiler.
Entitiy : Gonderilen
veri ile ilgili bilgi icerir.
Response : Serverin
gonderdigi cevaba ait bilgiler.
Ornek bir Server Response (Server Cevabi) soyledir.
*********************************************************************
HTTP/1.1 200 OK ----------->Durum Satiri
Date : Mon,1st Nov 1999, 16:12:23 GMT---------->General
Server : Apache/1.3.12 (Unix) (SuSE/Linux)PHP/4.0.2 ----------------->
Response
Last-modified: Fri ,29th Oct 1999, 12:08:03 GMT ------------->Entitiy
*********************************************************************
HTTP Body : Eger istek basarili ise cevabin body kisminda
istenilen web sayfasina ozgu HTML gonderilir.Browser cozumlemesi
icin hazirdir.
Tum Bu Islemler Icinde PHP'nin Yeri
Server ile istemci arasindaki bu trafigi anladigimiza gore
bir server tarafli scripting dili olan PHP tum bu islemler
sirasinda nereye giriyor bunu inceleyelim.
Detaylara girmeden kisaca aciklamak istersek,eger Web Server
istenilen sayfa bir php sayfasi ise bunu PHP Scripting Engine
denilen, ve turkcesi PHP Script Motoru olarak cevirebilecegimiz
bu motora islenmesi icin gonderir.
Isleme iki kisimmdan olusur.Birinci kisim "parsing" dedigimiz
islenmeden onceki ilk yazim kontroludur.
Genel olarak script gozden gecirilir yanlislik varmi diye
bakilir.Bu yanlislik asla bir dosya izin ihlali gibi degildir.
Bunlar ikinci kisimda "execution" kisminda ortaya cikar.Bu
ilk kisimda aslinda gramer ve dilbilgisi diyebilecegimiz
genel yazim hatalri varmi diye bakilir.
Yani kisaca Kod icerisinde serverda bir dosya ihlaline sebep
olacak veya hic olmayan bir dosyaya isaret eden kod olabilir.Ama
"parsing" kontrolunden yuzde yuz gececektir.Cunku kodlar
dogru ciktilari yanlis olabilir.
Ikinci kisim "Execution" da ise satir satir PHP kodlari
islenir ve gereken HTML dinamik olarak yaratilir.Eger tum
islemler basarili bir sekilde tamamlanirsa PHP motoru bunlari
Web Server'a iade eder Web Serverda bunlari kullanici bilgisayarina
gonderir.
Daha ileriki konulara gecmeden hazir yeri gelmisken bir
kac ifadeyi belirtmek istiyorum.
Kullanici bilgisyarinda (Istemci) yuklu olan browser her
zaman icin kendi "cache" inden yani onbelleginden sayfalari
kullaniciya gostermek ister.
Kullanici eger PHP sayfasini bir kere goruntulemis ise bu
kullancinin bilgisayarindaki browser programi tarafindan
onbellege alinir.
Yani server uzerindeki sayfanin bir kopyasi browserin onbelliginde
saklanir.Kullanici sayfayi tekrar goruntulemek isterse sayfa
server uzerinden degil de browserin kendi cache'inden kullaniciya
gosterilir.
Eger altin doviz borsa gibi aninda degisen veri setleri
kullaniyorsak bu istemedigimiz bir olaydir ve daha isin
basinda browsera sayfayi kullanicinin bilgisyarinda "cache"
etmemesini soyleyebiliriz.Iste bu noktada HTTP header lari
kullanilabilir.
Not : Bu olay ayni zamanda rahat bir web gezintisi saglanmasi
icin kullanicin yararinadir.Kullanci herseferinde "refresh"
tusunu kullanarak sayfanin yeniden yuklenmesi ile ugrasmayacaktir.
<?
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header ("Expires: Mon,26 Jul 1997 05:00:00 GMT");
?>
Hepsi bu kadar artik sayfamiz herseferinde Server uzerinden
yuklenecektir.Bu da herseferinde PHP nin kodlari tekrar
isleyerk kullaniciya istedigimiz taze guncel bilgileri gondermesini
saglayacaktir.
Ornek Dosyalar
http://www.turk-php.com/ornekler/http-aciklamali.gif
http://www.turk-php.com/ornekler/http-istek-cevap.gif
http://www.turk-php.com/ornekler/istemci-webserver.gif
Her turlu gorus veya sorunuzu mail le iletebilirsiniz.
serkan@turk-php.com
|