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


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

    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

    <?php
    // 如果报头未发送,则发送一个
    if (!headers_sent()) {
    	header("Location: http://www.w3school.com.cn/");
    	exit;
    }
    ?>

    例子2

    使用可选的 file 和 line 参数:

    <?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跳转函数:

    /**
     * URL跳转
     * @param string $url 跳转地址
     * @param int $time 跳转延时(单位:秒)
     * @param string $msg 提示语
     */
    function redirect($url, $time = 0, $msg = '') {
    	$url = str_replace(array("
    ", "
    "), '', $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();
    	}
    }
  • 相关阅读:
    springMVC,spring,mybatis全注解搭建框架--第一步,让框架跑起来
    实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件
    不带插件 ,自己写js,实现批量上传文件及进度显示
    excel转html 实现在线预览
    word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得
    实现图片旋转,滚动鼠标中间对图片放大缩小
    面试中常见问题之线程池与连接池的区别
    实例测试mysqlRR模式和RC模式各种锁情况
    分糖果
    MySQL试题
  • 原文地址:https://www.cnblogs.com/52php/p/5673348.html
Copyright © 2020-2023  润新知