You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:00:05