(PHP 4, PHP 5, PHP 7, PHP 8)
header — Ham bir HTTP başlığı gönderir
$başlık
, bool $değiştir
= true
, int $http_yanıt_kodu
= 0
) : voidheader() 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/');
exit;
?>
başlık
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 kodunu belirtilen değere zorlar. Bu değiştirge sadece
başlık
değiştirgesi boş değilse etkilidir.
Hiçbir değer dönmez.
Ö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 dinamik 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 otomatik olarak üretilmesi için session_cache_limiter() işlevini ve
session.cache_limiter
yapılandırma yönergesini kullanabilirsiniz.
Bilginize:
Başlıklar sadece onları destekleyen bir SAPI kullanımdaysa erişilebilir ve çıktılanabilir olacaktır.
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:
Çoğu çağdaş istemci » Location: için değiştirge olarak göreli bir URI kabul etmektedir, fakat bazı eski istemciler şema, konak ismi ve mutlak dosya yolu içeren mutlak bir URI gerektirir. 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.