Headerlar ve PHP ile header() kullanımı

Bir web sayfasının adresini, tarayıcının adres satırına yazıp “enter”a bastıktan sonra biraz bekleriz ve karşımıza istediğimiz web sayfası gelir. Enter’a basışımızdan, sayfanın yüklenmesi tamamlanana kadar arada pek çok işlem gerçekleşir, ama biz bu yazımızda sadece tarayıcı ile sunucu arasındaki ilişkiyi sağlayan “header”lar üzerine eğileceğiz!

Header’ı Türkçeleştirdiğimiz zaman karşımıza “başlık” kelimesi çıkar, tam olarak da doğrudur aslında, kullanıcının tarayıcısı ile internet sitesinin sunucusu arasında geçen diyalogda, tarafların birbirine gönderdikleri başlıklardır.

Başlıklar

Başlıklar ikiye ayrılır, tarayıcının gönderdiklerine “istek başlıkları”, sunucunun gönderdiklerine ise “cevap başlıkları” denir.

Basit bir şekilde düşünürsek, tarayıcının gönderdiği başlıklar, “istenilen sitenin ismi”dir. Sunucu ise cevap olarak içeriğin kendisini yollamadan önce içeriğin türünü, içeriğin oluşturulma tarihini gibi başlıklar yollar. İkili arasında iletişim bu şekilde devam eder.

Başlıklar ifade edilirken iki temel gösterge ile ifade edilirler:

Başlık-İsim : Başlık-Değer

Örnek olarak sunucunun şöyle bir cevap verdiğini düşünebiliriz:

Location: http://koodla.iblogger.com/
Content-Type: text/html
Content-Length: 1024

Sunucu, tarayıcının “rica ettiği” sayfayı gönderirken bu başlıkları (ve daha fazlasını) gönderebilir. Bu örnekte birincisi içeriğin yerini ifade eder, ikincisi içeriğin türünü, üçüncüsü ise içeriğin uzunluğunu ifade eder.

PHP ile header() kullanımı

PHP ile sayfalar oluştururken, bu sayfaların başlıklarını da atayabiliriz, bunun için mevcut fonksiyonumuz header() ‘dır.

Header() fonksiyonunu kullanabilmek için tek yapmamız gereken, parantezlerin arasına sayfa başlığını yazmamızdır. Bir küçük örnek şöyle olabilir:

header(“Location: http://koodla.iblogger.org/”)

Örnek header() kullanımları:

header() fonksiyonunu farklı amaçlarla kullanabilmekteyiz, bunlardan bir kaçını listeleyelim isterseniz:

Yönlendirme

Belki de header() fonksiyonunun en sık kullanım alanıdır php geliştiricileri için, kullanıcının mevcut sayfadan bir başka sayfaya yönlendirilmelerini sağlar, bunun için de “Location” başlığından yararlanır. Bir küçük örnek:

if ($_POST[“deger”] != 1234)
{
header(“Location: uyegiris.php”);
exit;
}

Yenileme

Header() fonksiyonunu kullanarak sayfanın yenilenmesini de sağlayabiliriz. Bunun için “Refresh” başlığından yararlanırız:

<?php
header('Refresh: 5; url=http://www.site.com/ikincisayfa.php');
echo5 saniye sonra yönlendiriliyorsunuz...;
?>

İçerik türünü belirleme

Cevap olarak oluşturduğumuz sayfanın içerik türünü biz belirtmesek de genelde tarayıcı anlar, ancak işimizi şansa bırakmamak için biz belirleyebiliriz.

<?php
header('Content-Type: image/jpeg');
imagejpeg($resim);
?>

Bu php sayfamız, sadece bir resmi ekranda gösterecek, tarayıcının da bunun bir resim dosyası olduğunu anlaması için header() fonksiyonundan yararlanıyoruz. Ya da gösterilecek Doküman normal bir metin dosyası ise onu da belirtebiliriz:

<?php
header('Content-Type: text/plain');
echo $metin;
?>

Content-Type başlığı ile pek çok içerik türünü belirtebiliriz. Bunun bir diğer örneği de .pdf dosyalarının tarayıcı ekranında gösterilmesi olabilir:

Ya da dosyanın görüntülenmesini değil de, indirilmesini istiyorsunuz, kullanıcıyı buna zorlamak istiyorsunuz, o halde “Content-Disposition” başlığından faydalanacağız:

<?php
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment;filename="metin_dosyasi.txt"');
echo $metin;
?>

Ön beleğe alma

Tarayıcılar genelde web sayfalarını önbelleklerine alırlar, böylece kullanıcının bir sonraki ziyaretinde, sayfanın önbellekten okunmasını sağlayarak hızlı açılmasına yardım ederler. Ancak bu bazen iyi değildir, kullanıcılar eski sayfanın içeriği ile karşılaşabilirler, bu nedenle ön belleğe almayı engellemek isteyebiliriz:

<?php
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Expires: Sun, 01 Jul 1995 00:00:00 GMT');
?>

Burada bir de extradan sayfanın geçerliliğini yitirdiği tarihi belirttik, böylece tarayıcının ön belleklemesini iki kere engellemeye çalışıyoruz!

Sonuç

Burada aslında yapmaya çalıştığımız şey, PHP ile sayfa başlıklarının kontrol edilmesini sağlamak. Burada gösterdiğimiz başlıkların dışında da bazı tanımlamalar var, mesela sayfanın sıkıştırılması, sunucu durumu (ör: 200: ok) gibi… Ancak bunlara çok sık ihtiyaç duyacağımızı sanmıyorum, daha genel header’lara yer vermeye çalıştım. Ve burada değindiklerimiz sunucunun gönderdiği başlıklardı, bir de tarayıcının gönderdiği başlıklar bulunmakta, (ör: tarayıcı ismi) bu başlıklara da erişip uygulamamızı onlara göre yönlendirebiliriz, bu da başka bir yazının konusu olsun!

NOT:
Daha detaylı anlatım için şu yazılara da göz atabilirsiniz:
– w3 header tanımlamaları: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14
– php.net header fonksiyonu: http://tr2.php.net/header
– headerlar üzerine bir yazı: http://www.expertsrt.com/tutorials/Matt/HTTP_headers.html
– header fonksiyonu kullanımı örnekleri http://www.jonasjohn.de/snippets/php/headers.htm

  • Guest

    cok guzel anladım 😀

X

Pin It on Pinterest

X