利用PHP的header()函数,可以实现页面跳转,如
1header("Location: ".$url);
但它有个缺点,一旦HTTP报头块已经发送,就不能使用 header() 函数,来发送其它的标头。
这个时候只能利用前端HTML或JS技术来实现页面跳转了!
怎样知道HTTP报头块已经发送了呢?
PHP的 headers_sent() 函数,可以帮忙。
PHP headers_sent() 函数
headers_sent() 函数检查 HTTP 标头是否已被发送以及在哪里被发送。
如果报头已发送,则返回 true,否则返回 false。
语法headers_sent(file,line)参数描述
file,line可选。
如果设置 file 和 line 参数,headers_sent() 会把输出开始的 PHP 源文件名和行号存入 file 和 line 变量中。
提示和注释
注释:一旦报头块已经发送,就不能使用 header() 函数 来发送其它的标头。使用此函数至少可以避免与 HTTP 标头有关的错误信息。
注释:可选的 file 和 line 参数是 PHP 4.3 中新加的。
例子1
1
2// 如果报头未发送,则发送一个
3if(!headers_sent()) {
4header("Location: http://www.w3school.com.cn/");
5exit;
6}
7?>
例子2
使用可选的 file 和 line 参数:
01
02// 传递 $file 和 $line,供日后使用
03// 不要预先为它们赋值
04if(!headers_sent($file,$line)) {
05header("Location: http://www.w3school.com.cn/");
06exit;
07// Trigger an error here
08}else{
09echo"Headers sent in $file on line $line";
10exit;
11}
12?>
根据上面的知识点,我们可以整理出自己的PHP跳转函数:
01/**
02* URL跳转
03* @param string $url 跳转地址
04* @param int $time 跳转延时(单位:秒)
05* @param string $msg 提示语
06*/
07functionredirect($url,$time= 0,$msg='') {
08$url=str_replace(array("\n","\r"),'',$url);// 多行URL地址支持
09if(empty($msg)) {
10$msg="系统将在 {$time}秒 之后自动跳转到 {$url} !";
11}
12if(headers_sent()) {
13$str=";
14if($time!= 0) {
15$str.=$msg;
16}
17exit($str);
18}else{
19if(0 ===$time) {
20header("Location: ".$url);
21}else{
22header("Content-type: text/html; charset=utf-8");
23header("refresh:{$time};url={$url}");
24echo($msg);
25}
26exit();
27}28}
以上就介绍了php重定向网页,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
本文原创发布php中文网,转载请注明出处,感谢您的尊重!