header location重定向语句对页面进行跳转失败的原因
函数header作用:
页面跳转
http头信息
头信息的作用很多,最主要的有下面几个:
1、跳转
当浏览器接受到头信息中的 Location: xxxx 后,就会自动跳转到 xxxx 指向的URL地址,这点有点类似用 js 写跳转。但是这个跳转只有浏览器知道,不管体内容里有没有东西,用户都看不到。
例:header("Location: http/");
2、指定网页的内容
同样一个XML文件,如果头信息中指定:Content-type: application/xml 的话,浏览器会将其按照XML文件格式解析。但是,如果头信息中是:Content-type: text/xml 的话,浏览器就会将其看作存文本解析。(浏览器不是按照扩展名解析文件的)
例:header('Content-type: application/pdf');
3、附件
不知道大家有没有注意,有些时候在一些网站下载东西,点下载连接以后,结果浏览器将这个附件当成网页打开了,里面显示的都是乱码,这个问题也和头信息有关。有时候浏览器根据Content-type 来判断是打开还是保存,这样有时就会判断错误(主要是网站设计者忘记写Content-type)。其实,还有一个可以来指定该内容为附件、需要保存,这个就是:Content-Disposition: attachment; filename="xxxxx"
例:header('Content-Disposition: attachment; filename="downloaded.pdf"');
//打开文件,并输出
readfile('original.pdf');
HTTP协议状态码
1×× 保留
2×× 表示请求成功地接收
3×× 为完成请求客户需进一步细化请求
4×× 客户错误
5×× 服务器错误
语法:
header(string,replace,http_response_code)
参数
string:必需。规定要发送的报头字符串。
replace:可选。指示该报头是否替换之前的报头,或添加第二个报头。默认是 true(替换)。false(允许相同类型的多个报头)。
http_response_code:可选。把 HTTP 响应代码强制为指定的值。(PHP 4 以及更高版本可用)
例1:
重定向网页
- <?php
- header("Location: http/");
- exit;
- ?>
例2:
强制用户每次访问这【fǎng wèn zhè】⚫个页面🥠时获取最新资【zuì xīn zī】料📙,而不是【ér bú shì】使用存🧟在客户【zài kè hù】端的缓存。
- <?php
- //告诉浏🕳览器此😥页面的过期时【guò qī shí】🏎间(用格林【yòng gé lín】威治时间表示),只要是已经过【yǐ jīng guò】去的日【qù de rì】期即可🎎。
- header("Expires:Mon,26 Jul 1970 05:00:00 GMT");
- //告诉浏览器🎴此页面【cǐ yè miàn】的最后【de zuì hòu】更新日期🤚(用格林威治时【wēi zhì shí】间表示)也就是【yě jiù shì】㊙当天【dāng tiān】🍞,目的就是强迫🙅浏览器🎴获取最新资料
- header("Last-Modified:".gmdate("D,d M Y H:i:s")."GMT");
- //告诉客户端浏【hù duān liú】🧖览器不【lǎn qì bú】🔢使用缓存
- header("Cache-Control: no-cache, must-revalidate");
- //参数🍗(与以前的服务【de fú wù】🕍器兼容),即兼容HTTP1.0协议【xié yì】
- header("Pragma: no-cache");
- ?>
例3:
输出状🌘态值到📋浏览器,主要用👝于访问【yú fǎng wèn】权限控【quán xiàn kòng】制【zhì】
- <?php
- header('HTTP/1.1 401 Unauthorized');
- header('status: 401 Unauthorized');
- ?>
例4:
要限制【yào xiàn zhì】一个用户不能访问该页【yè】🚚,则可设【zé kě shè】置状态为【wéi】404,如下所示🔲,这样浏【zhè yàng liú】🚘览器就显示🔲为【wéi】即该页【yè】😜不存在🌕
- <?php
- header('HTTP/1.1 404 Not Found');
- header("status: 404 Not Found"); //这种写👔法错误【fǎ cuò wù】
- ?>
例5:
隐藏文件的位置【zhì】🛁
html标签 <A href='http://hostname/*.mp3'></a>就可以【jiù kě yǐ】😲实现普通文件【tōng wén jiàn】下载🏔。如果为了保密文件,就不能【jiù bú néng】把文件链接告🏙诉别人【sù bié rén】,可以用😉header函数实现文件【xiàn wén jiàn】👴下载🏔。
header("Content-type: audio/mpeg");
header("Content-Disposition: attachment; filename=filenale");
header("Content-Description: PHP3 Generated Data");
例6:
header函数前【hán shù qián】🚾输入内容【nèi róng】
一般来说在header函数前【hán shù qián】🚾不能输出【chū】😶html内容【nèi róng】,类似的还有🦔setcookie() 和🍫 session 函数,这些函【zhè xiē hán】数需要在输出【chū】😶流中增【liú zhōng zēng】加消息🌮头部信📌息。如果在👽header()执行之【zhí háng zhī】前有echo等语句🔢,当后面🚘遇到header()时,就会报【jiù huì bào】🗣出【chū】😶 “Warning: Cannot modify header information - headers already sent by ....”错误【wù】🐜。就是说在这些函【zhè xiē hán】数的🕷前面不👻能有任何文字、空行、回车等【huí chē děng】😍,而且最好在【hǎo zài】header()函数后加上exit()函数。例如下【lì rú xià】面的错误【wù】🐜写法【xiě fǎ】,在两个【zài liǎng gè】php代码段【dài mǎ duàn】之间有🐧一个空🕔行:
- <?php
- //some code here
- ?>
- //这里应【zhè lǐ yīng】该是一个空行🖇
- <?php
- header("http/1.1 403 Forbidden");
- exit();
- ?>
原因:
PHP脚本开😱始执行【shǐ zhí háng】🍝 时,它可以📑同时发【tóng shí fā】🛵送【sòng】😴http消息头【xiāo xī tóu】⛹部【bù】(标题【biāo tí】🔙)信息【xìn xī】和🌠主体信息【xìn xī】🤟. http消息头【xiāo xī tóu】⛹部【bù】(来自【lái zì】 header() 或🕴SetCookie() 函数🅱)并不会【bìng bú huì】立即发🦅送【sòng】😴,相反【xiàng fǎn】👇,它被保【tā bèi bǎo】💁存到一💤个列表中. 这样就🌽可以允🌱许你修【xǔ nǐ xiū】改【gǎi】标题【biāo tí】🚆信息【xìn xī】🤟,包括缺省的标【shěng de biāo】题【tí】🔙(例如【lì rú】🗃Content-Type 标题【biāo tí】🔙).但是,一旦脚【yī dàn jiǎo】本发送【fā sòng】🌾了任何⏰非标题【biāo tí】🔙的输出🍈(例如【lì rú】🗃,使用【shǐ yòng】 HTML 或🕴 print()调用),那么🚓PHP就必须先发送【xiān fā sòng】🌾完所有😔的Header,然后终【rán hòu zhōng】止 HTTPheader.而后继【ér hòu jì】续发送【fā sòng】🌾主体数【zhǔ tǐ shù】据.从这时开始【kāi shǐ】,任何添加【tiān jiā】或🕴修改【gǎi】Header信息【xìn xī】🤟的试图都是不允许的,并会发送【fā sòng】🌾上述的【shàng shù de】错误消【cuò wù xiāo】息之一。
解决办【jiě jué bàn】法:
修改【gǎi】php.ini打开缓【dǎ kāi huǎn】🐨存(output_buffering),将output_buffering=0修改【gǎi】成🤹output_buffering=4096
或🕴者在程【zhě zài chéng】序中【xù zhōng】🔔使用缓【shǐ yòng huǎn】存函数🅱ob_start(),ob_end_flush() 等。原理是【yuán lǐ shì】🆎:output_buffering被启用💘时,在脚本发送【fā sòng】🌾输出时,PHP并不发送【fā sòng】🌾HTTPheader。相反【xiàng fǎn】👇,它将此🔎输出通【shū chū tōng】💀过管道(pipe)输入到😊动态增【dòng tài zēng】加的缓存中🍌(只能在PHP4.0中使用【shǐ yòng】,它具有中央化的输出🍈机制【jī zhì】🛴)。你仍然🔏可以修改【gǎi】/添加【tiān jiā】header,或者设✝置💾cookie,因为🏔 header实际上并没有📦发送【fā sòng】🌾。当全部【bù】脚本终止时,PHP将自动【jiāng zì dòng】发送【fā sòng】🌾HTTP header到浏览【dào liú lǎn】器,然后再发送【fā sòng】🌾输出缓冲中的内容。
关键词:header,location,重定向语句【yǔ jù】👎
阅读本文后您有什么感想? 已有 人给出评价!
- 11
- 419
- 428
- 100
- 336
- 300