Bootstrap 4开发通知系统触发Cannot modify header information错误如何解决
报错解决方案
错误根源
你遇到的Cannot modify header information - headers already sent是PHP的经典错误,触发原因是:HTTP header头必须在所有页面输出内容之前发送,你把JS代码直接写在Functions.php文件的PHP代码块之前,服务器解析文件时会先把这段JS作为普通输出内容返回给浏览器,后续再调用header()执行重定向时就会违反规则触发报错。
另外你当前的逻辑还存在隐含问题:如果用PHP header直接重定向,当前页面输出的播放音JS还没来得及执行,页面就已经跳转,提示音根本不会播放。
具体修复方案
方案1:调整脚本存放位置(推荐)
不要把前端JS代码放在纯后端逻辑的Functions.php文件开头,把play_sound函数的JS代码迁移到你项目的前端公共视图模板(比如页头、页脚模板文件)的合适位置,Functions.php只保留纯PHP后端逻辑,从根源避免提前输出。方案2:改用JS实现重定向,弃用PHP header重定向
如果你需要在触发播放提示音后再跳转页面,直接把重定向逻辑改成JS实现,完全不需要调用header()函数,自然不会触发报错:// 替换原有redirect_to_page函数调用的逻辑,直接输出带跳转的JS echo '<script type="text/javascript"> play_sound(); // 等待1秒让提示音播放后再跳转 setTimeout(function(){ window.location.href = "'. SITE_ADDR . $path .'"; }, 1000); </script>';方案3:临时开启输出缓冲(不推荐,仅做应急)
如果不想调整现有结构,可以在Functions.php的最开头(甚至在你写的JS代码之前)加一行PHP代码开启输出缓冲,让PHP先把所有输出内容缓存起来,等所有header操作执行完后再统一输出:<?php ob_start(); ?> <script type="text/javascript"> // 你原来的JS代码 </script> <?php // 你原来的PHP代码 // 代码末尾加一行ob_end_flush();输出缓存内容
内容的提问来源于stack exchange,提问作者helder ventura
相关产品推荐
相关产品推荐

