header

(PHP 4, PHP 5, PHP 7)

headerHam bir HTTP başlığı gönderir

Açıklama

header ( string $dizge [, bool $değiştir = true [, int $http_yanıt_kodu ]] ) : void

header() işlevi ham bir HTTP başlığı göndermek için kulanılır. HTTP başlıkları hakkında ayrıntılı bilgi edinmek için » HTTP/1.1 Belirtimi'ne bakınız.

header() işlevinin normal HTML etiketleri ve dosya veya PHP'deki boş satırlar dahil herhangi bir çıktıdan önce çağrılması gerektiğini unutmayınız. header() çağrısından önce sıkça yapılan hatalar: kodu include, require veya başka bir dosya okuma işlevi ile okumak; betik HTML'ye gömülüyse betiğin veya dosyanın başındaki boşluklar veya boş satırlar.

<html>
<?php
/* Bu bir hata verecektir.  header() çağrısından
 * önce hiçbir satırlar olmamalıydı. */
header('Location: http://localhost/');
?>

Değiştirgeler

dizge

Başlık dizgesi.

İki özel çağrı biçimi vardır. İlki, HTTP durum kodu gönderilirken kullanılır ve başlık "HTTP/" dizgesi ile başlar (harf büyüklüğüne duyarsız). Örneğin Apache'yi eksik dosyalarla ilgili sorunlar için (ErrorDocument yönergesi ile) bir PHP betiğini kullanacak şekilde yapılandırmışsanız betiğinizde uygun bir durum kodu üretmek için bu biçimi kullanabilirsiniz.

<?php
header
("HTTP/1.0 404 Not Found");
?>

İkinci özel biçim "Location:" başlığıdır. Bu başlığın tarayıcıya geri gönderilmesinden başka, bir 201 veya 3xx durum kodu henüz atanmamışsa ayrıca bir REDIRECT (302) durum kodu da gönderilir.

<?php
header
("Location: http://mesela.dom/"); /* Tarayıcıyı yönlendir */

/* Yönlendirme sonrası herhangi bir kodun çalıştırılmamasını sağlayalım. */
exit;
?>

değiştir

değiştir değiştirgesi isteğe bağlı olup, önceki bir başlığın mı değiştireceğini yoksa aynı türde ikinci bir başlık daha mı ekleneceğini belirtilir. Öntanımlı davranış mevcudu değiştirmektir. İşleve ikinci değiştirge olarak FALSE aktarırsanız aynı türde çok sayıda başlık bulunması için işlevi zorlamış olursunuz. Örnek:

<?php
header
('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM'false);
?>

http_yanıt_kodu

HTTP yanıt kodunun belirtilen değer olması için zorlanır.

Dönen Değerler

Hiçbir değer dönmez.

Sürüm Bilgisi

Sürüm: Açıklama
4.4.2 ve 5.1.2 Başlık yerleştirme saldırılarına karşı bir önlem olarak bu işlev artık bir kerede birden fazla başlık gönderilmesine izin vermemektedir.
4.3.0 http_yanıt_kodu değiştirgesi eklendi.
4.0.4 değiştir değiştirgesi eklendi.

Örnekler

Örnek 1 - İndirme söyleşisi

Kulanıcıyı, gönderdiğiniz veriyi (örneğin, bir PDF dosyası) kaydetmesi için uyarmak isterseniz, bir dosya ismi belirtmek ve tarayıcının bir dosya kayıt söyleşisi göstermesini sağlamak için » Content-Disposition başlığını kullanabilirsiniz.

<?php
// Bir PDF çıktılayacağız
header('Content-type: application/pdf');

// Dosya ismi indirilen.pdf olsun
header('Content-Disposition: attachment; filename="indirilen.pdf"');

// Okunacak PDF dosyası
readfile('original.pdf');
?>

Örnek 2 - Yönergelerin önbelleklenmesi

PHP betikleri çoğunlukla istemcinin tarayıcısı veya sunucuya aracılık eden vekiller tarafından önbelleğe alınmaması gereken devingen içerikler üretirler. Çoğu vekilin veya tarayıcının önbellekleme işlemini kapatmasını şöyle sağlayabilirsiniz:

<?php
header
("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Geçmişte bir tarih
?>

Bilginize:

Yukarıdaki başlıkların hiçbirini çıktılamadığınız halde sayfalarınız önbelleğe alınmıyor olabilir. Kullanıcının kendi tarayıcısının önbellekleme ile ilgili öntanımlı davranışını değiştirebileceği çok çeşitli seçenekleri olabilir. Yukarıdaki başlıkları göndererek bu tür olası ayarları geçersiz kılabilirsiniz.

Ayrıca, oturumları kullanırken önbellekleme ile ilgili doğru başlıkların özdevinimli olarak üretilmesi için session_cache_limiter() işlevini ve session.cache_limiter yapılandırma yönergesini kullanabilirsiniz.

Notlar

Bilginize:

PHP 4'ten itibaren, bu işlevi çağırmadan önce, tarayıcıya gönderilene kadar sunucuda bekletilmek üzere çıktıyı bir tampona yazabilirsiniz. Bu işlemi betiğinizden ob_start() ve ob_end_flush() işlevlerini çağırarak veya output_buffering yapılandırma yönergesini php.ini veya sunucu yapılandırma dosyalarında belirterek yapabilirsiniz.

Bilginize:

header() çağrısının ilk çağrı olup olmamasından bağımsız olarak istemciye ilk olarak daima HTTP durum başlığı satırı gönderilir. header() işlevini hiçbir HTTP başlığı gönderilmeden önce yeni bir durum satırı ile kullanırsanız bu durum satırını geçersiz kılabilirsiniz.

Bilginize:

Microsoft Internet Explorer 4.01'de bunun çalışmasını engelleyen bir hata vardır ve bundan kurtulmanın çaresi yoktur. Ayrıca, Microsoft Internet Explorer 5.5'te de böyle bir hata vardır. Fakat SP2'ye yükselterek bu sorundan kurtulmak mümkündür.

Bilginize: Eğer safe mode etkinse ve HTTP kimlik doğrulaması için WWW-Authenticate başlığını kullanıyorsanız başlığın realm alanına betiğin kullanıcı kimliği eklenecektir.

Bilginize:

HTTP/1.1, » Location: için değiştirge olarak bir mutlak URI belirtilmesini gerektirir (şema, konak ismi ve mutlak dosya yolu dahil), fakat bazı istemciler göreli URI'leri kabul ederler. Bir mutlak URI'yi bir göreli URI'ye dönüştürmek için örnekteki gibi $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] ve dirname() kullanabilirsiniz:

<?php
/* Bulunulan dizinde başka bir sayfaya yönlendirelim */
$konak  $_SERVER['HTTP_HOST'];
$yol   rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$ek 'sayfam.php';
header("Location: http://$konak$yol/$ek");
exit;
?>

Bilginize:

Oturum kimliği, session.use_trans_sid etkin olsa bile Location başlığı ile aktarılmaz. SID sabiti kullanılarak elle aktarılmalıdır.

Ayrıca Bakınız