在 PHP 編程中,header() 函數(shù)是一個經(jīng)常被使用的函數(shù)。它經(jīng)常被用于構(gòu)建一個基本的網(wǎng)頁,通過 header() 函數(shù)來控制瀏覽器的行為。其中一個常見的使用場景就是將用戶跳轉(zhuǎn)到一個新頁面。這就是 header() 函數(shù)的一個重要功能:header("Location: new-page.php")。
當(dāng)我們調(diào)用 header() 函數(shù)并指定 Location,瀏覽器會開始重新加載一個新的頁面。舉個例子,假設(shè)我們的網(wǎng)站擁有兩個頁面:index.php 和 about.php。當(dāng)用戶第一次訪問我們的網(wǎng)站時,我們會顯示 index.php 頁面。如果用戶想要查看關(guān)于我們的頁面,我們需要將用戶帶到 about.php。為了實現(xiàn)這個目的,我們可以使用以下代碼:
header("Location: about.php"); exit;這段代碼將告訴瀏覽器將用戶自動帶到 about.php 頁面。我們還使用了 exit 命令來確保該代碼沒有向瀏覽器輸出任何其他內(nèi)容。 在上面的代碼中,我們首先調(diào)用 header() 函數(shù)并為其傳遞了一個 Location 參數(shù)。這個參數(shù)包含了新頁面的網(wǎng)址,可以是相對路徑,也可以是絕對路徑。在這個例子中,我們使用了相對路徑,因為 about.php 是在網(wǎng)站的根目錄中。 雖然看起來很簡單,但是 header("Location: new-page.php") 函數(shù)其實涉及了很多細(xì)節(jié)和安全問題。下面我們來更詳細(xì)地討論這個函數(shù)的用法。 第一點(diǎn)。header() 函數(shù)必須在任何輸出之前被調(diào)用。這是因為一旦開始輸出頁面內(nèi)容,就不能再使用 header() 函數(shù)來控制瀏覽器的行為了。如果你在輸出 HTML 頁面的時候調(diào)用 header() 函數(shù),就會遇到“headers already sent”(頭信息已經(jīng)發(fā)送)的錯誤。因此,在使用 header() 函數(shù)之前,應(yīng)該確保沒有任何輸出。我們可以使用以下代碼來確保沒有輸出:
ob_start(); header("Location: new-page.php"); exit;這個代碼使用了 ob_start() 函數(shù)來捕獲輸出。這樣可以確保不會在 header() 函數(shù)之前有任何輸出。exit 命令在這里起到了非常重要的作用:它停止了 PHP 執(zhí)行流程。因為該代碼只是完成了一個跳轉(zhuǎn)動作,所以我們在這里并不需要輸出任何內(nèi)容。 第二點(diǎn)。header() 函數(shù)必須指定完整的 URL 或相對 URL。如果你使用相對 URL,它必須符合 URI 規(guī)范。URI 規(guī)范指定相對 URL 的格式必須是相對于頁面的根目錄的路徑。如果你想要使用絕對 URL,你需要包含協(xié)議(http:// 或 https://)和域名信息。例如:
header("Location: https://www.example.com/new-page.php"); exit;第三點(diǎn)。header() 函數(shù)必須包含 exit 命令。如果你不使用 exit 命令,PHP 將會繼續(xù)執(zhí)行代碼并輸出頁面內(nèi)容。如果你打算使用 header() 函數(shù)來重定向用戶,但是沒有使用 exit 命令,你會得到一個錯誤。因此,在這里我們需要使用 exit 命令來確保代碼僅執(zhí)行一次。 第四點(diǎn)。使用 header() 函數(shù)時應(yīng)該非常小心。因為 header() 函數(shù)允許您輕松地向瀏覽器返回任何頭信息,所以它也容易被濫用。一些黑客會使用 header() 函數(shù)來修改或偽造網(wǎng)站的頭信息,比如修改 Cookie 或者設(shè)置惡意的重定向。因此,如果您使用 header() 函數(shù)時不小心,就可能讓您的網(wǎng)站失去安全性。實際上,為了避免這種情況,許多 PHP 開發(fā)者通常使用一組“最佳實踐”來設(shè)置安全的頭信息。這些“最佳實踐”包括在您的網(wǎng)站中啟用 HTTPS、驗證任何用戶輸入、過濾和轉(zhuǎn)義用戶輸入等等。 綜上所述,header("Location: new-page.php") 函數(shù)在 PHP 編程中有很大的作用。它可以幫助我們非常方便地實現(xiàn)一些基本的頁面跳轉(zhuǎn)功能,同時它也需要我們注意一些安全性問題。如果我們能夠遵循一些“最佳實踐”,就可以使用 header() 函數(shù)來確保我們的網(wǎng)站更加安全可靠。