自定义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 (); } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 个人数据保全计划:从印象笔记迁移到joplin
· Vue3.5常用特性整理
· 重拾 SSH:从基础到安全加固
· 并发编程 - 线程同步(一)