溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用php header()

發(fā)布時(shí)間:2020-07-29 09:27:02 來(lái)源:億速云 閱讀:121 作者:Leah 欄目:編程語(yǔ)言

如何使用php header()?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

php header的作用就是發(fā)送原生HTTP頭,其語(yǔ)法是“header ( string $string [, bool $replace = true [, int $http_response_code ]] ) : void”。

php header()的用法詳解

(PHP 4, PHP 5, PHP 7)

header — 發(fā)送原生 HTTP 頭

說(shuō)明

header ( string $string [, bool $replace = true [, int $http_response_code ]] ) : void

header() 用于發(fā)送原生的 HTTP 頭。

請(qǐng)注意 header() 必須在任何實(shí)際輸出之前調(diào)用,不管是普通的 HTML 標(biāo)簽,還是文件或 PHP 輸出的空行,空格。這是個(gè)常見(jiàn)的錯(cuò)誤,在通過(guò)include,require,或者其訪問(wèn)其他文件里面的函數(shù)的時(shí)候,如果在header()被調(diào)用之前,其中有空格或者空行。 同樣的問(wèn)題也存在于單獨(dú)的 PHP/HTML 文件中。

<html>
<?php
/* This will give an error. Note the output
 * above, which is before the header() call */
header('Location: http://www.example.com/');
exit;
?>

參數(shù)

string

頭字符串。

有兩種特別的頭。第一種以“HTTP/”開(kāi)頭的 (case is not significant),將會(huì)被用來(lái)計(jì)算出將要發(fā)送的HTTP狀態(tài)碼。 例如在 Apache 服務(wù)器上用 PHP 腳本來(lái)處理不存在文件的請(qǐng)求(使用 ErrorDocument 指令), 就會(huì)希望腳本響應(yīng)了正確的狀態(tài)碼。

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

第二種特殊情況是“Location:”的頭信息。它不僅把報(bào)文發(fā)送給瀏覽器,而且還將返回給瀏覽器一個(gè) REDIRECT(302)的狀態(tài)碼,除非狀態(tài)碼已經(jīng)事先被設(shè)置為了201或者3xx。

<?php
header("Location: http://www.example.com/"); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit;
?>

replace

可選參數(shù) replace 表明是否用后面的頭替換前面相同類(lèi)型的頭。 默認(rèn)情況下會(huì)替換。如果傳入 FALSE,就可以強(qiáng)制使相同的頭信息并存。例如:

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

http_response_code

強(qiáng)制指定HTTP響應(yīng)的值。注意,這個(gè)參數(shù)只有在報(bào)文字符串(string)不為空的情況下才有效。

返回值

沒(méi)有返回值。

更新日志:

5.1.2 這個(gè)函數(shù)現(xiàn)在可以一次性阻止多個(gè)報(bào)文信息的發(fā)送,從而作為對(duì)報(bào)文信息注入攻擊的一種防護(hù)。

Example #1 下載對(duì)話框

如果你想提醒用戶去保存你發(fā)送的數(shù)據(jù),例如保存一個(gè)生成的PDF文件。你可以使用? Content-Disposition的報(bào)文信息來(lái)提供一個(gè)推薦的文件名,并且強(qiáng)制瀏覽器顯示一個(gè)文件下載的對(duì)話框。

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile('original.pdf');
?>

Example #2 緩存指令

PHP腳本總是會(huì)生成一些動(dòng)態(tài)內(nèi)容,而這些內(nèi)容是不應(yīng)該被緩存的,不管是客戶端瀏覽器還是在服務(wù)器端和客戶端瀏覽器之間的任何代理。我們可以像這樣來(lái)強(qiáng)制設(shè)置瀏覽器和各個(gè)代理層不緩存數(shù)據(jù):

<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>

Note:

也許你會(huì)遇到這樣的情況,那就是即使你沒(méi)使用上面這段代碼,你的頁(yè)面也沒(méi)有被緩存。大多數(shù)情況是因?yàn)橛脩艨梢宰约涸O(shè)置他們的瀏覽器從而改變?yōu)g覽器默認(rèn)的緩存行為。一旦發(fā)送了上面這段報(bào)文信息,那么你就應(yīng)該重寫(xiě)那些可能用到緩存了的代碼。

此外,在啟用session的情況下,session_cache_limiter()和session.cache_limiter的配置可以用來(lái)自動(dòng)地生成正確的緩存相關(guān)的頭信息。

注釋

Note:

數(shù)據(jù)頭只會(huì)在SAPI支持時(shí)得到處理和輸出。

Note:

你所有需要輸出到瀏覽器的數(shù)據(jù)將會(huì)一直緩存在服務(wù)器端,直到你發(fā)送他們,這將造成比較大的資源開(kāi)銷(xiāo)。你可以是用輸出緩沖來(lái)避開(kāi)這個(gè)問(wèn)題。你可以通過(guò)在腳本里使用ob_start()和ob_end_flush()或者直接在你的php.ini文件里設(shè)置output_buffering,也可以直接在服務(wù)器的配置文件里設(shè)置。

Note:

HTTP狀態(tài)信息的報(bào)文永遠(yuǎn)都是最新被發(fā)送到客戶端的,而不管header()是否是在最先發(fā)送的。報(bào)文狀態(tài)碼可能會(huì)被重寫(xiě),當(dāng)調(diào)用header()來(lái)設(shè)定新的狀態(tài)碼,除非HTTP報(bào)文已經(jīng)被發(fā)送了。

Note:

在IE 4.01和IE 5.5里有bug,要解決就升級(jí)瀏覽器吧,想必也沒(méi)人用那么遠(yuǎn)古的神器了吧。

Note: 如果安全模式(safe mode)被激活,那么腳本的uid將會(huì)被添加到WWW-Authenticate的realm部分,前提是你設(shè)置了這個(gè)頭信息的情況下(使用 HTTP 認(rèn)證)。

Note:

HTTP/1.1需要一個(gè)絕對(duì)的網(wǎng)絡(luò)資源地址(URI)來(lái)作為一個(gè)參數(shù)供? Location:使用,在其中必須包含了協(xié)議,主機(jī)地址還有完整的路徑,但是一些客戶端可以接受相對(duì)的網(wǎng)絡(luò)資源地址。你可以在一個(gè)相對(duì)的網(wǎng)路資源地址的基礎(chǔ)上使用$_SERVER['HTTP_HOST'],$_SERVER['PHP_SELF']和dirname()來(lái)組裝一個(gè)絕對(duì)的網(wǎng)路資源地址。

<?php
/* Redirect to a different page in the current directory that was requested */
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;
?>

Note:

在執(zhí)行Location header跳轉(zhuǎn)的時(shí)候,Session ID無(wú)法通傳遞的,即使session.use_trans_sid是激活狀態(tài)的。只能通過(guò)手動(dòng)傳遞using SID的值來(lái)實(shí)現(xiàn)。

關(guān)于如何使用php header()問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI