php实现页面强制跳转,PHP实现页面跳转的几种方法 - 米扑博客

在PHP中如何从一个页面重定向到另外一个页面呢?

方法1:header() 跳转

header — 发送原生 HTTP 头,header() 用于发送原生的 HTTP 头。关于 HTTP 头的更多信息请参考 » HTTP/1.1 specification。

请注意header()必须在任何实际输出之前调用,不管是普通的 HTML 标签,还是文件或 PHP 输出的空行,空格。这是个常见的错误,在通过include,require,或者其访问其他文件里面的函数的时候,如果在header()被调用之前,其中有空格或者空行,便会报错。同样的问题也存在于单独的 PHP/HTML 文件中。

格式:

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

PHP里的header()函数的作用就是向浏览器发出由HTTP协议规定的本来应该通过WEB服务器的控制指令,

例如,声明返回信息的类型("Context-type: xxx/xxx")、页面的属性("No cache", "Expire")等等。

用HTTP头信息重定向到另外一个页面的方法如下:

// header("Location: https://proxy.mimvp.com");// success

$go_url = "https://proxy.mimvp.com";

header("Location: $go_url");

exit();// exit 是个语法结构,如果没有 status 参数要传入,可以省略圆括号, 即 exit;

?>

说明:注意 "Localtion: "的写法,Location 紧跟着一个冒号,空格,目标网址。

上面两种写法都是这正确的,Location 是立即跳转。

header 跳转需要同时满足以下三个条件:

1、location和“:”号间不能有空格,“:”号与url之间有一个空格。

2、在用header前不能有任何的输出, 即没有echo, print, printf, var_dump等。

3、header后的PHP代码还会被执行,因此一般用 exit 或 exit() 退出。

补充:php exit 的多种写法,详见 php exit

// exit program normally

exit;

exit();

exit(0);

// exit with an error code

exit(1);

exit(0376); // octal

?>

方法2:meta 标签

用 HTML 的 meta 标记,即用 meta 的 refresh 标记

I love mimvp.com, waiting 5, 4, 3, 2, 1...

说明:以上两种 meta 方式(直接网址,赋值变量网址)都成功,在当前页面停留5秒钟, 然后跳转到目标网址

一般用于提示用户的场景,等待用户看完提示后,定时(停留5秒钟)跳转到了目标网址;若设置为0秒,则立即跳转。

方法3:js 脚本

echo "";

// $url="https://proxy.mimvp.com";

// echo "

// echo "window.location.href='$url'";

// echo "";

exit();// exit 是个语法结构,如果没有 status 参数要传入,可以省略圆括号, 即 exit;

?>

利用 script 实现,还有一个好处,就是可以在新窗口、新父窗口打开网页

// 新窗体(tab)打开

echo "";

// 父窗口(window)打开

echo "";

?>

window.location.href 和 window.open() 区别

一、性质不同

1、window.location:window.location是window对象的属性。

2、window.open():window.open是window对象的方法。

二、用途不同

1、window.location:window.location用来替换当前页,也就是重新定位当前页 。

2、window.open():window.open用来让链接页面在新窗口中打开。

三、打开网站不同

1、window.location:window.location只能在一个网站中打开本网站的网页。

2、window.open():window.open可以在一个网站上打开另外的一个网站的地址 。

用window.location和window.open做链接的区别:

"top.location.href"是最外层的页面跳转

"window.location.href"、"location.href"是本页面跳转

"parent.location.href"是上一层页面跳转.

location是window对象的属性,而所有的网页下的对象都是属于window作用域链中(这是顶级作用域),所以使用时是可以省略window。

而top是指向顶级窗口对象,parent是指向父级窗口对象。

window.location是window对象的属性,而window.open是window对象的方法

window.location是你对当前浏览器窗口的URL地址对象的参考!

window.open是用来打开一个新窗口的函数!

window.open()是可以在一个网站上打开另外的一个网站的地址

而window.location()是只能在一个网站中打开本网站的网页

window.location或window.open如何指定target?

这是一个经常遇到的问题,特别是在用frame框架的时候

解决办法:

window.location 改为 top.location 即可在顶部链接到指定页

window.open("你的网址","_top");

PHP header() 函数

header() 函数向客户端发送原始的 HTTP 报头。

认识到一点很重要,即必须在任何实际的输出被发送之前调用 header() 函数(在 PHP 4 以及更高的版本中,您可以使用输出缓存来解决此问题):

// 结果出错, 在调用 header() 之前已存在输出

// 请务必保证, 在调用 header() 之前没有任何输出, 即没有echo, print, printf, var_dump等

header('Location: http://www.mimvp.com');

?>

header() 语法

header(string, replace, http_response_code)

参数

描述

string

必需。规定要发送的报头字符串。

replace

可选。指示该报头是否替换之前的报头,或添加第二个报头。

默认是 true(替换)。false(允许相同类型的多个报头)。

http_response_code

可选。把 HTTP 响应代码强制为指定的值。(PHP 4 以及更高版本可用)

注释:从 PHP 4.4 之后,该函数防止一次发送多个报头,这是对头部注入攻击的保护措施。

header()函数的第一个参数 string 有两种特别的头:

第一种以“HTTP/”开头的 (case is not significant,不区分大小写),将会被用来计算出将要发送的HTTP状态码。

例如,在 Apache 服务器上用 PHP 脚本来处理不存在文件的请求(使用 ErrorDocument 指令), 就会希望脚本响应了正确的状态码。

示例1:

header("HTTP/1.0 404 Not Found");

?>

第二种特殊情况是“Location:”的头信息。

它不仅把报文发送给浏览器,而且还将返回给浏览器一个 REDIRECT(302)的状态码,除非状态码已经事先被设置为了201或者3xx。

header("Location: http://www.mimvp.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */

exit;

?>

replace

可选参数 replace 表明是否用后面的头替换前面相同类型的头。 默认情况下会替换。如果传入 FALSE,就可以强制使相同的头信息并存。例如:

header('WWW-Authenticate: Negotiate');

header('WWW-Authenticate: NTLM', false);

?>

http_response_code

强制指定HTTP响应的值。注意,这个参数只有在报文字符串(string)不为空的情况下才有效。

示例2:

// Date in the past

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

header("Cache-Control: no-cache");

header("Pragma: no-cache");

?>

...

...

注释:用户可能会设置一些选项来更改浏览器的默认缓存设置。

通过发送上面的报头,您可以覆盖任何这些设置,强制浏览器不进行缓存!

示例3:

提示用户保存一个生成的 PDF 文件(Content-Disposition 报头用于提供一个推荐的文件名,并强制浏览器显示保存对话框):

header("Content-type:application/pdf");

// 文件将被称为 downloaded.pdf

header("Content-Disposition:attachment;filename='downloaded.pdf'");

// PDF 源在 original.pdf 中

readfile("original.pdf");

?>

...

...

注释:微软 IE 5.5 存在一个阻止以上机制的 bug,通过升级为 Service Pack 2 或更高的版本,可以解决该 bug。

参考推荐:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值