(PHP 4, PHP 5, PHP 7, PHP 8)
header — Ham bir HTTP başlığı gönderir
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ği unutulmamalıdır. 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şında boşluklar veya boş satırlar bulunması.
<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, eksik dosyalarla ilgili
sorunlar için (ErrorDocument
yönergesi ile) bir PHP
betiğini kullanacak şekilde yapılandırılmışsa betikte uygun bir
durum kodu üretmek için bu biçim kullanılabilir.
<?php
// Bu örnekte "HTTP/" için özel bir durum gösterilmiştir.
// Her durumda geçerli olacak kullanım şöyle olurdu:
// 1. header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
// (Hala HTTP/1.0 kullanan istemci için http durum iletisinin yerini alır)
// 2. http_response_code(404); (öntanımlı iletiyi kullanmak için)
header("HTTP/1.1 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 kod çalıştırılmamalıdır. */
exit;
?>
değiştir
değiştir
bağımsız değişkeni isteğe bağlı olup,
önceki 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 bağımsız değişken olarak false
aktarılırsa aynı türde çok sayıda başlık bulunması için işlevin
zorlanması sağlanabilir.
Örnek:
<?php
header('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM', false);
?>
http_yanıt_kodu
HTTP yanıt kodunu belirtilen değere zorlar. Bu bağımsız değişken sadece
başlık
bağımsız değişkeni boş değilse etkilidir.
Hiçbir değer dönmez.
Gönderilecek başlığın zamanlamasındaki bir başarısızlık,
header() işlevinin E_WARNING
seviyesinde bir hata çıktılamasına sebep olur.
Örnek 1 - İndirme söyleşisi
Kulanıcının, gönderilen veriyi (örneğin, bir PDF dosyası) kaydetmesi için uyarılması istenirse, bir dosya ismi belirtmek ve tarayıcının bir dosya kayıt söyleşisini göstermesini sağlamak için » Content-Disposition başlığı kullanılabilir.
<?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ı şöyle sağlanabilir:
<?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çbiri çıktılanmadığı halde sayfalar ö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ılınabilir.
Ayrıca, oturumları kullanırken önbellekleme ile ilgili doğru başlıkların otomatik olarak üretilmesi için session_cache_limiter() işlevi ve
session.cache_limiter
yapılandırma yönergesi kullanılabilir.
Örnek 3 - Çerez atamak
setcookie() çerezleri ayarlamanın kolay bir yolunu sağlar. setcookie() işlevinin desteklemediği öznitelikleri içeren bir çerezi ayarlamak için header() işlevi kullanılabilir.
Bu örnekte Partitioned
özniteliğini içeren bir çerez
atanmaktadır.
<?php
header('Set-Cookie: name=value; Secure; Path=/; SameSite=None; Partitioned;');
?>
Bilginize:
Başlıklar sadece onları destekleyen bir SAPI kullanımdaysa erişilebilir ve çıktılanabilir olacaktır.
Bilginize:
Bu işlevi çağırmadan önce, tarayıcıya gönderilene kadar sunucuda bekletilmek üzere çıktı bir tampona yazılabilir. Bu işlemi betik içinde ob_start() ve ob_end_flush() işlevleri çağrılarak veya
output_buffering
yapılandırma yönergesi php.ini veya sunucu yapılandırma dosyalarında belirtilerek yapılabilir.
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şlevi hiçbir HTTP başlığı gönderilmeden önce yeni bir durum satırı ile kullanılırsa bu durum satırı geçersiz kılınabilir.
Bilginize:
Çoğu çağdaş istemci » Location: için bağımsız değişken 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() kullanılabilir:
<?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.