php header()的用法详解-PHP问题

资源魔 25 0

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中文网!

以上就是php header()的用法详解的具体内容,更多请存眷资源魔其它相干文章!

标签: php php教程 header php故障解决 php使用问题

抱歉,评论功能暂时关闭!