首頁 後端開發 php教程 說一說php中header用法擴充問題

說一說php中header用法擴充問題

Jun 24, 2017 pm 02:28 PM
header php 擴充 用法 問題

 header() is used to send rawheaders. See the HTTP/1.1 specification for more information onheaders. 

#範例一: 

<?PHP
Header("Location: http://www.php.cn"); 
exit;//在每个重定向之后都必须加上“exit",避免发生错误后,继续执行。
?>
登入後複製

------------------------------------- -------------------------------------------
範例二:禁止頁面在IE中快取
使瀏覽者每次都能得到最新的資料,而不是Proxy 或cache 中的資料:

<?PHP
header( &#39;Expires: Fri, 4 Dec 2009 09:00:00 GMT&#39; );
header( &#39;Last-Modified: &#39; . gmdate( &#39;D, d M Y H:i:s&#39; ) . &#39; GMT&#39; );
header( &#39;Cache-Control: no-store, no-cache, must-revalidate&#39; );
header( &#39;Cache-Control: post-check=0, pre-check=0&#39;, false );
header( &#39;Pragma: no-cache&#39; ); //兼容http1.0和https
?>
登入後複製

CacheControl = no-cache Pragma=no-cache  Expires = -1
如果伺服器上的網頁經常變化,就把Expires設為-1,表示立即過期。如果一個網頁每天凌晨1點更新,可以把Expires設定為隔天的凌晨1點。當HTTP1.1伺服器指定CacheControl = no-cache時,瀏覽器就不會快取該網頁。
舊式 HTTP 1.0 伺服器不能使用 Cache-Control 標題。所以為了向後相容 HTTP 1.0 伺服器,IE使用Pragma:no-cache 標題對 HTTP 提供特殊支援。如果用戶端透過安全連線與伺服器通訊,且伺服器在回應中傳回 Pragma:no-cache 標題,則 Internet Explorer 不會快取此回應。
注意:Pragma:no-cache 僅當在安全連接中使用時才防止緩存,如果在非安全頁中使用,處理方式與Expires:-1 相同,該頁將被緩存,但被標記為立即過期。
http-equiv meta標記:
在html頁面中可以用http-equiv meta來標記指定的http訊息頭。舊版的IE可能不支援html meta標記,所以最好使用http訊息頭來停用快取。
----------------------------------------------- ---------------------------------
範例三: 讓使用者的瀏覽器出現找不到檔案的資訊。
網路上很多資料這樣寫:php的函數header()可以傳送Status標頭,
如 header(”Status: 404 Not Found」)。但實際上瀏覽器回傳的回應卻是:

HTTP/1.x 200 OK
Date: Thu, 03 Aug 2006 07:49:11 GMT
Server: Apache/2.0.55 (Win32) PHP/5.0.5
X-Powered-By: PHP/5.0.5
Status: 404 Not Found
Content-Length: 0
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: text/html
登入後複製

查了一些資料,正確的寫法是:

header(”http/1.1 404 Not Found”);
登入後複製

第一部分為HTTP協定的版本(HTTP-Version) ;第二部分為狀態代碼(Status);第三部分為原因短語(Reason-Phrase)。
----------------------------------------------- ---------------------------------
範例四:讓使用者下載檔案( 隱藏文件的位置)
html標籤 就可以實作普通檔下載。如果為了保密文件,就不能把文件連結告訴別人,可以用header函數實作文件下載。

<?php
header("Content-type: application/x-gzip"); 
header("Content-Disposition: attachment; filename=文件名/"); 
header("Content-Description: PHP Generated Data"); 
?>
登入後複製

範例四:header函數前輸入內容
一般來說在header函數前不能輸出html內容,類似的還有setcookie() 和session 函數,這些函數需要在輸出流中增加訊息頭部資訊。如果在header()執行之前有echo等語句,當後面遇到header()時,就會報出 “Warning: Cannot modify header information - headers already sent by ….”錯誤。就是說在這些函數的前面不能有任何文字、空行、回車等,而且最好在header()函數後面加上exit()函數。例如下面的錯誤寫法,在兩個php程式碼段之間有一個空白行:

//some code here
<?php
//这里应该是一个空行
header(”http/1.1 403 Forbidden”);
exit();
?>
登入後複製

原因是:PHP脚本开始执行 时,它可以同时发送http消息头部(标题)信息和主体信息. http消息头部(来自 header() 或 SetCookie() 函数)并不会立即发送,相反,它被保存到一个列表中. 这样就可以允许你修改标题信息,包括缺省的标题(例如 Content-Type 标题).但是,一旦脚本发送了任何非标题的输出(例如,使用 HTML 或 print() 调用),那么PHP就必须先发送完所有的Header,然后终止 HTTP header.而后继续发送主体数据.从这时开始,任何添加或修改Header信息的试图都是不允许的,并会发送上述的错误消息之一。
解决办法:
修改php.ini打开缓存(output_buffering),或者在程序中使用缓存函数ob_start(),ob_end_flush()等。原理是:output_buffering被启用时,在脚本发送输出时,PHP并不发送HTTP header。相反,它将此输出通过管道(pipe)输入到动态增加的缓存中(只能在PHP 4.0中使用,它具有中央化的输出机制)。你仍然可以修改/添加header,或者设置cookie,因为header实际上并没有发送。当全部脚本终止时,PHP将自动发送HTTP header到浏览器,然后再发送输出缓冲中的内容。
=================================================================
PHP 手册实例应用
1:您可以使用heder命令,强制使浏览器使用新鲜的内容(无缓存) 。
也可以给网址增加了一个唯一的编号,使其每次都读取新的内容,避免缓存。
example:

<?php
print "<img src="cs.jpg" mce_src="cs.jpg">";   //通常读取的是缓存文件
?>
<?
print "<img src="cs.jpg?".time()."" mce_src="cs.jpg?".time()."">";   //增加了唯一的编号,使浏览器重新请求
w//print "<img src="cs.jpg?".rand(100,999)."" mce_src="cs.jpg?".rand(100,999)."">"; 
?>
登入後複製

2: 下面是个很好的函数,将图片传送给浏览器显示。

<?php
function PE_img_by_path($PE_imgpath = "")
{
    if (file_exists($PE_imgpath)) {
        $PE_imgarray = pathinfo($PE_imgpath);
        $iconcontent = file_get_contents($PE_imgpath);
        header("Content-type: image/" . $PE_imgarray["extension"]);
        header(&#39;Content-length: &#39; . strlen($iconcontent));
        echo $iconcontent;
        die(0);
    }
    return false;
} 
?>
登入後複製

以上是說一說php中header用法擴充問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

See all articles