23 Aralık 2007 Pazar

PHP ile Header

Merhaba Webkolog takipçileri!

Bir web sayfasını ziyaret ettiğimizde, arka planda sunucu ile tarayıcı arasında sürekli bir iletişim yaşanır. Bu iletişimin en önemli parçalarından biri de **HTTP başlıklarıdır (HTTP Headers)**. Bu başlıklar, tarayıcıya sayfa hakkında çeşitli bilgiler (içerik türü, önbellekleme talimatları, yönlendirmeler vb.) göndererek, web sitemizin davranışını kontrol etmemizi sağlar. PHP'de bu HTTP başlıklarını kontrol etmenin ana yolu ise **header()** fonksiyonudur. Bu makalede, PHP 5.2 ve öncesi versiyonlarda header() fonksiyonunu nasıl kullanacağımızı adım adım inceleyeceğim. Gelin, web uygulamalarınızın "kapı bekçisi" olan header() fonksiyonunun gücünü keşfedelim!


1. header() Fonksiyonunun Temel Kullanımı ve Kısıtlaması

header() fonksiyonu, bir HTTP başlığı göndermek için kullanılır. En kritik kuralı şudur: **header() fonksiyonu, ekrana herhangi bir çıktı (HTML, boşluk, PHP hata mesajı vb.) gönderilmeden önce çağrılmalıdır!** Aksi takdirde "Headers already sent" (Başlıklar zaten gönderildi) hatası alırsınız.


<?php
// Doğru kullanım: Herhangi bir çıktıdan önce header() fonksiyonunu çağırın.
header("Content-Type: text/html; charset=UTF-8"); // Sayfanın UTF-8 karakter setinde olduğunu belirtir.
echo "<p>Bu metin, başlıklar gönderildikten sonra görüntülendi.</p>";

// Yanlış kullanım örneği (Hata verecektir!):
// echo "<p>Bu satır önce ekrana yazdırıldı.</p>";
// header("Location: https://www.webkolog.com"); // Hata: Headers already sent
?>

2. Sayfa Yönlendirmeleri (Redirection)

header() fonksiyonunun en yaygın kullanımlarından biri, kullanıcıyı bir sayfadan başka bir sayfaya yönlendirmektir. Bu, bir işlem sonrası (örn. form gönderimi) veya sayfanın konumu değiştiğinde çok işe yarar.


<?php
// Sayfa yönlendirmesi için genellikle ob_start() ve ob_end_flush() kullanılır.
// Bu, herhangi bir erken çıktıyı tamponlar ve header() fonksiyonunun sorunsuz çalışmasını sağlar.
ob_start(); // Çıktı tamponlamayı başlatır

// Kalıcı yönlendirme (301 Moved Permanently)
// Arama motorları için önemlidir, sayfanın kalıcı olarak taşındığını belirtir.
// header("Location: https://www.webkolog.com/yeni-adres.php", true, 301);
// exit(); // Yönlendirme sonrası betiği durdurmak iyi bir pratiktir!

// Geçici yönlendirme (Varsayılan 302 Found)
// header("Location: https://www.webkolog.com/gecici-adres.php");
// exit();

// Süreli yönlendirme (Refresh Header)
// Kullanıcıyı belirtilen süre (saniye cinsinden) sonra başka bir adrese yönlendirir.
header("Refresh: 2; url=https://www.webkolog.com/anasayfa.php");
echo "<p>Ana sayfaya 2 saniye içinde yönlendiriliyorsunuz...</p>";

ob_end_flush(); // Çıktı tamponunu boşaltır ve kapatır.
?>

3. Önbellekleme Kontrolü

Web sayfalarınızın tarayıcılarda veya ara sunucularda nasıl önbellekleneceğini kontrol etmek, performansı artırmak veya hassas bilgilerin önbelleğe alınmasını önlemek için önemlidir.


<?php
// Önbellek kontrolü için başlıklar (tarayıcıya sayfayı önbelleğe almamasını söyler)
// Bu başlıklar, hassas veya sürekli değişen içerikler için faydalıdır.
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Geçmiş bir tarih
header("Cache-Control: no-cache, must-revalidate"); // Önbelleği kapat
header("Pragma: no-cache"); // Eski HTTP/1.0 uyumluluğu için

echo "<p>Bu sayfa önbelleğe alınmayacak şekilde ayarlandı.</p>";
?>

4. Dosya İndirme ve İçerik Türü Ayarlama

PHP ile dinamik olarak dosya indirme (PDF, resim vb.) veya farklı içerik türleri sunma, header() fonksiyonunun gücünü gösteren başka bir alandır.


<?php
// PDF dosyası indirme örneği
// Bir 'original.pdf' dosyanızın olduğunu varsayalım.
// if (file_exists("original.pdf")) {
//     header('Content-Type: application/pdf'); // İçerik tipini PDF olarak ayarla
//     // 'Content-Disposition' başlığı, tarayıcıya dosyanın indirilmesini ve ismini söyler.
//     header('Content-Disposition: attachment; filename="indirilen_belge.pdf"');
//     readfile("original.pdf"); // Dosyanın içeriğini doğrudan tarayıcıya gönder
//     exit();
// } else {
//     // Dosya yoksa kullanıcıya hata mesajı gösterebiliriz
//     echo "<p>PDF dosyası bulunamadı!</p>";
// }


// Resim dosyası görüntüleme örneği
// Bir 'guitar_wallpaper.jpg' dosyanızın olduğunu varsayalım.
// if (file_exists("guitar_wallpaper.jpg")) {
//     header("Content-type: image/jpeg"); // İçerik tipini JPEG resim olarak ayarla
//     readfile("guitar_wallpaper.jpg"); // Resmin içeriğini doğrudan tarayıcıya gönder
//     exit();
// } else {
//     echo "<p>Resim dosyası bulunamadı!</p>";
// }

// Farklı bir resim türü için
// header("Content-type: image/png");
// readfile("resim.png");
// exit();

echo "<p>Dosya indirme veya resim gösterme kodları yorum satırı yapılmıştır.</p>";
?>

5. HTTP Durum Kodları

Bir sayfanın durumunu (başarılı, bulunamadı, yasaklandı vb.) tarayıcıya ve arama motorlarına bildirmek için HTTP durum kodlarını kullanırız.


<?php
// 404 Not Found (Sayfa Bulunamadı)
// Bir sayfa mevcut olmadığında veya geçersiz bir URL'ye erişildiğinde kullanılır.
// header("HTTP/1.0 404 Not Found");
// echo "<h4>404 - Sayfa Bulunamadı</h4><p>Aradığınız sayfa mevcut değil.</p>";
// exit();

// 403 Forbidden (Erişim Yasaklandı)
// Kullanıcının bir kaynağa erişim izni olmadığında kullanılır.
// header("HTTP/1.0 403 Forbidden");
// echo "<h4>403 - Erişim Yasaklandı</h4><p>Bu sayfaya erişim izniniz yok.</p>";
// exit();

echo "<p>Durum kodu örnekleri yorum satırı yapılmıştır.</p>";
?>

header() fonksiyonu, PHP'deki en güçlü ve esnek araçlardan biridir. HTTP başlıklarını doğru kullanarak, web uygulamalarınızın tarayıcılarla nasıl etkileşim kuracağını, kullanıcıları nasıl yönlendireceğinizi, önbellekleme davranışlarını nasıl yöneteceğinizi ve hata durumlarını nasıl bildireceğinizi tam olarak kontrol edebilirsiniz. Unutmayın, bu fonksiyonu her zaman HTML çıktısından önce çağırmak ve özellikle yönlendirmelerde exit() kullanmak, yaygın hataları önlemek için hayati öneme sahiptir.

Webkolog'u takipte kalın!

Hepinize hatasız ve başarılı kodlama deneyimleri dilerim!

0 yorum:

Yorum Gönder