自定义PHP页面跳转函数redirect($url, $time = 0, $msg = '')

利用PHP的header()函数,可以实现页面跳转,如

1
header("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
3
4
5
6
7
<?php
// 如果报头未发送,则发送一个
if (!headers_sent()) {
    header("Location: http://www.w3school.com.cn/");
    exit;
}
?>

例子2

使用可选的 file 和 line 参数:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
// 传递 $file 和 $line,供日后使用
// 不要预先为它们赋值
if (!headers_sent($file, $line)) {
    header("Location: http://www.w3school.com.cn/");
    exit;
    // Trigger an error here
} else {
    echo "Headers sent in $file on line $line";
    exit;
}
?>

 

 


 

 

根据上面的知识点,我们可以整理出自己的PHP跳转函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
 * URL跳转
 * @param string $url 跳转地址
 * @param int $time 跳转延时(单位:秒)
 * @param string $msg 提示语
 */
function redirect($url, $time = 0, $msg = '') {
    $url = str_replace(array("\n", "\r"), '', $url); // 多行URL地址支持
    if (empty($msg)) {
        $msg = "系统将在 {$time}秒 之后自动跳转到 {$url} !";
    }
    if (headers_sent()) {
        $str = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>";
        if ($time != 0) {
            $str .= $msg;
        }
        exit($str);
    } else {
        if (0 === $time) {
            header("Location: " . $url);
        } else {
            header("Content-type: text/html; charset=utf-8");
            header("refresh:{$time};url={$url}");
            echo($msg);
        }
        exit();
    }
}

 

posted @   52php  阅读(1997)  评论(0编辑  收藏  举报
编辑推荐:
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
阅读排行:
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 个人数据保全计划:从印象笔记迁移到joplin
· Vue3.5常用特性整理
· 重拾 SSH:从基础到安全加固
· 并发编程 - 线程同步(一)
点击右上角即可分享
微信分享提示