男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站

header

(PHP 4, PHP 5, PHP 7, PHP 8)

header發(fā)送原生 HTTP 頭

說(shuō)明

header(string $string, bool $replace = true, int $response_code = ?): void

header() 用于發(fā)送原生的 HTTP 頭。關(guān)于 HTTP 頭的更多信息請參考 ? HTTP/1.1 specification。

請注意 header() 必須在任何實(shí)際輸出之前調用,不管是普通的 HTML 標簽,還是文件或 PHP 輸出的空行,空格。這是個(gè)常見(jiàn)的錯誤,在通過(guò)include,require,或者其訪(fǎng)問(wèn)其他文件里面的函數的時(shí)候,如果在header()被調用之前,其中有空格或者空行。 同樣的問(wèn)題也存在于單獨的 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;
?>

參數

string

頭字符串。

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

<?php
// 本示例演示了 "HTTP/" 的特殊例子,典型用法的最佳實(shí)踐,包括:
// 1. header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
//    (覆蓋 http 狀態(tài)消息,兼容還在使用 HTTP/1.0 的客戶(hù)端)
// 2. http_response_code(404); (使用默認消息)
header("HTTP/1.1 404 Not Found");
?>

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

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

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

response_code

強制指定 HTTP 響應的值。注意,這個(gè)參數只有在報文字符串(header)不為空的情況下才有效。

返回值

沒(méi)有返回值。

錯誤/異常

當 header 發(fā)送失敗時(shí),header() 會(huì )拋出 E_WARNING 級別的錯誤

范例

示例 #1 下載對話(huà)框

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

<?php
// 輸出 PDF 文件
header('Content-type: application/pdf');

// 名稱(chēng)為 downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// 該 PDF 來(lái)源于 original.pdf
readfile('original.pdf');
?>

示例 #2 緩存指令

PHP 腳本經(jīng)常生成一些動(dòng)態(tài)內容,它不該被客戶(hù)端、服務(wù)器與瀏覽器之間的代理緩存。 許多代理與客戶(hù)端都支持這樣強制禁用緩存:

<?php
header
("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // 過(guò)去的日期
?>

注意:

也許你會(huì )遇到這樣的情況,那就是即使你沒(méi)使用上面這段代碼,你的頁(yè)面也沒(méi)有被緩存。大多數情況是因為用戶(hù)可以自己設置他們的瀏覽器從而改變?yōu)g覽器默認的緩存行為。一旦發(fā)送了上面這段報文信息,那么你就應該重寫(xiě)那些可能用到緩存了的代碼。

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

注釋

注意:

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

注意:

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

注意:

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

注意:

絕大多數現代瀏覽器的 ? Location: 都支持相對 URI,但也有一些舊瀏覽器需要絕對 URI:包含協(xié)議、主機名、絕對路徑。 一般情況下,可以借助 $_SERVER['HTTP_HOST']、$_SERVER['PHP_SELF']、 dirname() 將相對地址組合成絕對 URI:

<?php
/* 根據當前請求所在的目錄,重定向到不同的頁(yè)面 */
$host  $_SERVER['HTTP_HOST'];
$uri   rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;
?>

注意:

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

參見(jiàn)

男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站