17 Nisan 2014 Perşembe

PHP ile HTTP Başlıklarının Kullanımı



Bu kitapçık HTTP başlık fonksiyonlarını anlatmak amacında olmayıp bu geniş konu hakkında sadece pratikte bilgi aktarmakla yetinecektir.
Bir web tarayıcı bir web sunucuya bir döküman istediği gönderdiğinde web sunucu istenilen dökümanın yanısıra header(başlık) adı verilen bazı açıklayıcı ve yönlendirici bilgiler de gönderir. Konuyu örneklerle açıklamaya çalışalım.

header("Pragma: no-cache");
header("Cache-Control: no-cache, must revalidate");

PHP, dinamik içerikli web siteleri oluşturmak amaçlı kullanıldığı için kimi zaman bazı sayfaların web tarayıcının cache denilen ara belleğinde saklanmaması daha doğru olmaktadır. Bu, özellikle yüksek güvenlik gerektiren ve çok sık değişen siteler için gereklidir. Yukarıdaki kod parçası kullanıldığı PHP betiğinin çıktısının cache denilen ara bellekte saklanmasını engellemek amacı ile kullanılır.

header("Location: http://www.php.org.tr");

Bu kod parçası ise dökümanın herhangi bir yerinde, kullanıcıdan hiç bir girdi almaya ihitiyaç duymadan aktif adresi değiştirmeye yarar. Çok sık kullanılır ve özellikle bir login ekranından sonra girilen bilgiye göre karar vererek aktif adresi değiştirmek gibi uygulamalar için faydalıdır.

Örnek vermek gerekirse... login.html adlı bir HTML dökümanımız olduğunu varsayalım. Bu HTML dökümandan alınan girdi "karar.php" adlı PHP betiğinde işlenecek ve girilen
bilgiye göre adresi değiştirecektir.
Ücretsiz Hosting
<html>
<head>
   <title> Login Form </title>
</head>
<body>
   <form action="karar.php" method="post">
   <input type="text" name="kullanici_adi"><p>
   <input type="password" name="sifre"><p>
   <input type="submit" name="submit" value="Tamam">
   </form>
</body>
</html>

Bu sayfadan alınan girdiler kullanici_adi ve sifre seklindedir. Bu bilgileri karar.php dosyasında inceleyerek karar veriyoruz.

// başındaki ve sonundaki boşlukları yok ediyoruz.
$kullanici_adi = trim($kullanici_adi);
$sifre = trim(sifre);
if ($kullanici_adi == "umut") {
   if ($sifre = "bu_bir_sifredir") {
      header ("Location : giris_basarili.php");
   }
}
header ("Location : giris_basarisiz.php");

Yukarıdaki kod parçasında kullanıcı adı ve şifrenin doğru olup olmadığı kontrol edildikten sonra eğer her iki bilgi de doğru ise giris_basarili.php adlı döküman çağrılıyor. Eğer bu bilgilerden herhangi birisi doğru değilse giris_basarili.php betiği çağrılmayacak ve dolayısı ile aktif adres, koşulsuz çağrılan giris_basarisiz.php dosyası olacaktır.

Yukarıdaki örnekte dikkat edilmesi gereken bir nokta vardır. header ("Location.........");  kullanımı sadece kendisinden önce ekrana bir çıktı yapılmadığı durumlarda çalışacaktır.

Örneğin :
   echo "Öylesine bir çıktı";
   header(Location : "deneme.html");

Kod parçacığı beklendiği gibi deneme.html dosyasını çağırmayacaktır. Bu kısıtlama PHP' nin zayıflığından değil HTTP protokolünün tanımlarından kaynaklanmaktadır. Diğer bazı çok kullanılan HTTP başlıkları şu şekildedir:

Content-Encoding
Content-Language
Content-Type
Expires
Referrer
Last-Modified
User-Agent
Accept-Encoding
Accept-Language
.....


Bu başlıklar hakkında ayrıntılı bilgiye ftp://ftp.isi.edu/in-notes/rfc2626.txt adresinden ulaşabilirsiniz.

0 yorum:

Yorum Gönder