|
Seri 2 - PHP'nin Çalışma Prensipleri |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bu yazıda bir PHP
uygulamasının yaşam döngüsünü anlatmaya çalışacağım. Aşağıda görmüş olduğunuz
şemada bir son kullanıcı isteminin döngüsü anlatılmıştır.
Sunucuya
Erişilmesi:
Son kullanıcı (istemci), sunucu adını internet gezginin (internet explorer)
adres bölümüne girer. Gezgin bağlı bulunduğu DNS (Domain Name Server)dan sunucunun
IP (Internet Protocol) adresini çözümledikten sonra aynı adrese 80. port (kapı)
dan "GET / HTTP/1.1" istemini yollar. Bu istem sunucu tarafında 80.
portu dinlemekte olan http servisi tarafından karşılanır. RCF protokolüne göre
istemi yorumlayan http servisi istemciye daha evvelden konfigre edilmiş, ilgili
klasördeki kullanıcıların ilk erişilmesini istediği dosyayı yollar. Eğer bu
dosya konfigrasyonda belirtilmiş statik html olamayan bir uygulama dosyası ise
dosya yollanmadan önce ilgili uygulama çağırılır.
Aşağıda
bir istemcinin sunucuya gönderdiği paketi görebilirsiniz. İlk satır HTTP 1.1
standartlarına uygun bir istem gönderildiğini göstermekte. "GET /"
ibaresi ise o klasörün indexnin istendiğini belirtmekte. Ardından gelen "Accept"
başlığı, kullanılan gezginin kabul ettiği dosya tiplerini göstermekte. Html
sayfalarının transferinin hızlandırılması için text olan html sunucu tarafından
istemciye yollanmadan önce gzip ile sıkıştırılır. "Accept-Encoding gzip"
ibaresi de istemcinin bu sıkıştırılmış htmllerin çözebileceğini göstermektedir;
bu şekilde sunucu htmli yollamadan sıkıştırıp sıkıştırmamasına karar verir.
"Accept-Language tr" istemcinin talep ettiği konuşma dilini belirtmektedir."Connection
Keep-Alive" istemci ile sunucu arasında kurulan bağlantının (TCP/IP soketlerinin)
kullanıcı tarafı kapanmadıkça bir sonraki işlem için açık tutulmasını sağlar.
Bu şekilde sunucu tarafında SESSION (oturum) tutulabilir çünki http servisleri
bir kullanıcının daha evvel oturup açıp açmadığını TCP/IP soketlerine (daha
evvel açtığı bağlantılara) bakarak karar verirler. Bilgisayarınızda açılan TCP/IP
soketlerinin durumunu görmek için komut satırına netstat
-n yazmanız yeterlidir. "Cookie" sunucu tarafından istemci
tarafına atılan ufak text bilgilerdir. Bunlar sunucuya istemci tarafından aşağıdaki
gördüğünüz şekilde iade edilir , bu sayede sunucu istemciye daha evvel hangi
bilgiyi yazdığını hatırlar. Bu demek oluyorki cookieler değiştirilebilir veya
görüntülenebilir bu yüzden cookielere şifre gibi önemli verileri işlemek sakıncalı
olabilir."Host" başlığı HTTP 1.1 standartı ile gelmiştir, eklenme
amacı sanal barındırmalarda bir sunucu üzerinde birden fazla site (host) olabilir,
bu durumda bu başlık hangi hosta ulaşmak istediğinizi belirtmektir. "If-Modified-Since"
eğer son ziyaretinizden beri sayfa üzerinde bir değişiklik yoksa o zaman sayfa
gezgin tarafından istemci tarafındaki bellekten çekilir."User-Agent"
istemci tarafında kullanılan gezginin spesifikasyonlarını belirtir. Örneğin
bu başlıkta istemcide .NET framework 2.0 çalıştırmanın mümkün olduğu gözükmekte;
bu şekilde .NET 2.0 ile yazılmış ActiveX leri çalıştırabileceğini anlıyoruz.
(ActiveX: istemci tarafında çalışan windows uygulamaları)
İstemci
Paketi (istemcinin 80. porttan sunucuya gönderdiği text) |
GET
/ HTTP/1.1
Accept image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel,
application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash,
*/*
Accept-Encoding gzip, deflate
Accept-Language tr
Connection Keep-Alive
Cookie COUNTRY=TUR%2C81.214.132.213; LAST_LANG=en
Host www.php.net
If-Modified-Since Tue, 04 Jan 2005 09:10:48 GMT
User-Agent Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET
CLR 2.0.40607) |
PHP
Dosyalarının Yorumlanması ve Derlenmesi:
PHP sunuculara iki farklı şekilde yüklenebilmektedir. Pek güvenli olmamasına
rağmen PHP http servisi ile bağlantısı olmadan kendi başına çalışsabilen CGI
olarak veya http servisinin bir modülü olan ve daha perforymanslı çalışan SAPI
olarak da kurulum gerçekleştirilebilir. CGI yapısında http servisi php.exe uygulamasına
PHP dosyasını yollar, php.exe yorumlama ve derleme işlemini gerçekleştirdikten
sonra çıktısını http servisine iade eder; bundan sonra http servisi bu çıktıyı
kullanıcıya iletir. PHPnin http servisi ile entegre olmamasın dolayı PHPnin
CGI olarak tanıtılması performans kayıplarına ve güvenlik açıklarına neden olmaktadır
ve bu açıkların kapatılması büyük iş gücü istemektedir.Bu yüzden diğer çalışma
prensibi olan SAPI üzerinde yoğunlaşmak daha uygun; yukarda görmüş olduğunuz
şema da SAPI tanımına göre yapılmıştır.
Http
servisinin bir modülü olarak kurulan PHP, herhangibi php uygulaması http servisi
tarafından tetiklendiğinde devreye girer ve php dosyasını ilk önce kendi içerisinde
bulunan yorumlayıcı tarafından okur. Ardından Zend Motoru içerisinde çalıştırılabilir
bir şekilde hafızaya yükler ve çalıştırma zamanı içerisinde gerekli kütüphaneler
ile ilişkiler kurulup çıktı sağlar. Bu süreç içerisinde tüm işlem için gereken
hafıza ve CPU kaynaklarını http servisinden teymin eder veya harici bir kaynağa
erişmeye çalıştığında Http servisi kimliği ile işlemlerini gerçekleştirmeye
çalışır.Kısacası Http servisi bir kılıf gibi PHPyi sarmaktadır. Kurulum bölümü
esnasında bu işleme prensiplerini göze alarak güvenlik ayarlarımızı şekillendireceğiz.
PHP
uygulaması http servisi tarafından tamamlandıktan sonra istemciye aşağıdaki
gibi bir cevap döndürür. "HTTP/1.1 200 OK" ibaresi istemin standartlar
içerisinde olduğunu ve cevabının sağlıklı döneceğini belirtmektedir. "Connection
close" aradaki bağlantının sonlandırıldığını belirtmektedir. "Content-language
en" döndürülen cevabın dilini belirtmektedir. "Content-Type text/html;charset=ISO-8859-1"
döndürülen içeriğin text ve http olduğunu aynı zamanda textin karater tanımının
iso-8859-1 olduğunu belirtmektedir. Türkçe için iso anahtarı iso-8859-9 dur
bunu sunucu tarafında kurulum esnasında düzenlememiz gerekmekte. "Server"
sunucunun tipini ve üzerinde yüklü mödülleri göstermekte. Esasında bu güvenlik
açısından sakıncılı çünki uygulamanıza saldırmak isteyen kişilere PHP ve APACHE
sürümünüzü vermiş oluyorsunuz. bu şekilde debug listelerine bakıp bu açıklardan
faydalanmak isteyebilirler; gene kurulum tarafında bundan kurtulmak için ne
yapmamız gerektiğini görücez. Aynı zamanda w3 ün yaptığı hangi sunucu daha
fazla kullanıyor istatistikleride bu cevaplar ile yapılmakta. "X-Powered-By"
yaptığınız işlem sonucu eğer sunucu tarafında bir uygulama çalışmış ise bu başlık
hangi uygulamanın çalıştığını göstermektedir.
Sunucu
Paketi (istemciye gönderilen text cevap) |
HTTP/1.1
200 OK
Connection close
Content-language en
Content-Type text/html;charset=ISO-8859-1
Date Sat, 08 Jan 2005 14:26:40 GMT
Last-Modified Sat, 08 Jan 2005 14:18:38 GMT
Server Apache/1.3.26 (Unix) mod_gzip/1.3.26.1a PHP/4.3.3-dev
Set-Cookie COUNTRY=TUR%2C195.174.96.129; expires=Sat, 15-Jan-05 14:26:40
GMT; path=/; domain=.php.net
Via 1.1 TTCache01 (Jaguar/3.0-59)
X-Powered-By PHP/4.3.3-dev <html>
....
</html> |
PS:
GTK+ daki gelişmeler ile PHP ile göresel programlamanın artması sonucu PHP
4.3.0 ile yeni bir SAPI (Server Application Programming Interface) türü olan
CLI (Command Line Interface) gelişmiştir. Sunucu tarafında SAPI olarak çalışan
PHP aynı zamanda görsel programlamalar içinde giriş noktası oluşturan çalıştırılabilir
php dosyasınıda içermekte (CLI). GTK+ Bölümünde bu konunun detaylarından bahsedeceğiz.
Önemli:
Web programlamasında
en çok karıştırılan konulardan biride çalışma prensipleri ile alakalı olan Web
tabanlı Sunucu ve Istemci ilişkisidir. Son kullanıcı bir istem yolladıktan sonra
bu http servisi her istemde olduğu gibi ayrı ve diğer benzer işlem süreçlerinden
bağımsız bir işlem süreci açar. Ardından çıktı statik olarak sunucu
aracılığı ile istemciye iade edilir. Şu çok önemlidir ki iade işlemi sonrasında
bu işlem süreci yok edilir. Yani açılan herhangibi işlem bir öncekini
hatırlamaz veya bir benzeri ile bağlantı kurup hayatta kalamaz. (Bu pararafın
biraz anlamsız geldiğini biliyorum fakat zaman içerisinde anlamanız daha mümkün.)
Örneğin üyelik gibi süreklilik gerektiren işlemlerin sağlanamabilmesi için sunucu
tarafında SESSION (oturum), kullanıcı tarafında COOKIE (çerez) kavramları gerçekleştirilmiştir.
Sunucu kullanıcıdan cookie bilgisini aldıktan sonra kendisinde bulunan oturum
bilgisi ile karşılaştırıp daha evvel bu kullanıcıyı tanıdığını tespit eder ve
kaynaklara erişimini mümkün kılar.Kısacası kullanıcı ile sunucu haberleşmelerini
parçalanmış bir şekilde adım adım yapar, yani bir süreklilikten (kesilmeyen
haberleşmeden) bahsedilemez.
*
http: (Hyper Text Transfer Protocol)
Makale:
Seri 2 - PHP'nin Çalışma Prensipleri PHP ile Programlama Ahmet İpek
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|