MultiServis.Net //PHP El Kitabı

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>

PHP Ile Programlanmis Web Sayfalarinin "Istemci" Bilgisayarda Goruntulenmesi Yazar: Serkan Tarih: 01/03/02

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

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>