溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用php header()

發布時間:2020-07-29 09:27:02 來源:億速云 閱讀:132 作者:Leah 欄目:編程語言

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

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

php header()的用法詳解

(PHP 4, PHP 5, PHP 7)

header — 發送原生 HTTP 頭

說明

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

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

請注意 header() 必須在任何實際輸出之前調用,不管是普通的 HTML 標簽,還是文件或 PHP 輸出的空行,空格。這是個常見的錯誤,在通過include,require,或者其訪問其他文件里面的函數的時候,如果在header()被調用之前,其中有空格或者空行。 同樣的問題也存在于單獨的 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/”開頭的 (case is not significant),將會被用來計算出將要發送的HTTP狀態碼。 例如在 Apache 服務器上用 PHP 腳本來處理不存在文件的請求(使用 ErrorDocument 指令), 就會希望腳本響應了正確的狀態碼。

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

第二種特殊情況是“Location:”的頭信息。它不僅把報文發送給瀏覽器,而且還將返回給瀏覽器一個 REDIRECT(302)的狀態碼,除非狀態碼已經事先被設置為了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 表明是否用后面的頭替換前面相同類型的頭。 默認情況下會替換。如果傳入 FALSE,就可以強制使相同的頭信息并存。例如:

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

http_response_code

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

返回值

沒有返回值。

更新日志:

5.1.2 這個函數現在可以一次性阻止多個報文信息的發送,從而作為對報文信息注入攻擊的一種防護。

Example #1 下載對話框

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

<?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腳本總是會生成一些動態內容,而這些內容是不應該被緩存的,不管是客戶端瀏覽器還是在服務器端和客戶端瀏覽器之間的任何代理。我們可以像這樣來強制設置瀏覽器和各個代理層不緩存數據:

<?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:

也許你會遇到這樣的情況,那就是即使你沒使用上面這段代碼,你的頁面也沒有被緩存。大多數情況是因為用戶可以自己設置他們的瀏覽器從而改變瀏覽器默認的緩存行為。一旦發送了上面這段報文信息,那么你就應該重寫那些可能用到緩存了的代碼。

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

注釋

Note:

數據頭只會在SAPI支持時得到處理和輸出。

Note:

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

Note:

HTTP狀態信息的報文永遠都是最新被發送到客戶端的,而不管header()是否是在最先發送的。報文狀態碼可能會被重寫,當調用header()來設定新的狀態碼,除非HTTP報文已經被發送了。

Note:

在IE 4.01和IE 5.5里有bug,要解決就升級瀏覽器吧,想必也沒人用那么遠古的神器了吧。

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

Note:

HTTP/1.1需要一個絕對的網絡資源地址(URI)來作為一個參數供? Location:使用,在其中必須包含了協議,主機地址還有完整的路徑,但是一些客戶端可以接受相對的網絡資源地址。你可以在一個相對的網路資源地址的基礎上使用$_SERVER['HTTP_HOST'],$_SERVER['PHP_SELF']和dirname()來組裝一個絕對的網路資源地址。

<?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:

在執行Location header跳轉的時候,Session ID無法通傳遞的,即使session.use_trans_sid是激活狀態的。只能通過手動傳遞using SID的值來實現。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女