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

PHP重定向异常:未检测到Location标头请求失败

问题排查与解决建议

针对你遇到的重定向报错问题,结合本地正常、学校环境异常的情况,给你以下具体排查方向:

  • 检查recodex_save_survey函数的隐性输出
    这类问题大多源于函数内部未察觉的输出:比如函数里残留了echo/print/var_dump调试代码、PHP警告/错误(学校服务器可能开启了display_errors,而本地处于关闭状态)、甚至是函数文件末尾?>之后的空格换行。可以在调用函数前后加以下代码临时排查:

    ob_clean(); // 清空之前的缓存
    recodex_save_survey(/* 你的参数 */);
    $output = ob_get_contents();
    var_dump($output); // 查看是否有隐藏输出
    exit;
    
  • 确认ob_start()位置绝对靠前
    确保ob_start()是脚本的第一行有效代码,不能在它之前有任何字符——包括<?php标签前的空格、UTF-8 BOM头(部分编辑器会自动添加BOM,本地环境可能兼容但学校服务器对BOM敏感)。直接把ob_start()放在<?php标签之后的最顶部位置。

  • 验证header代码是否被执行
    有可能recodex_save_survey内部提前触发了exit/die,或者抛出异常导致后续代码未执行到。可以在header()前加一行日志代码确认:

    file_put_contents('debug.log', '已进入重定向步骤', FILE_APPEND); // 写入日志
    header("Location: /index.php", true, 302); // 换成绝对路径尝试
    exit;
    

    之后检查服务器上是否生成了debug.log,确认代码走到了重定向环节。

  • 排查PHP配置差异
    本地和学校服务器的PHP配置可能存在差异:

    • 检查output_buffering配置:本地可能默认开启,学校服务器关闭,但你手动添加的ob_start()应该能覆盖配置,可通过ini_get('output_buffering')对比两边的值。
    • 检查display_errors:学校服务器如果开启该配置,函数执行时的警告会直接输出,破坏header发送逻辑。可以在脚本开头临时添加error_reporting(0);关闭错误输出测试。
  • 清理缓存再发送header
    即便使用了ob_start(),也可能存在缓存残留。可以在header()前添加ob_clean();,确保没有缓存内容干扰:

    ob_clean();
    header("Location: index.php", true, 302);
    exit;
    

内容的提问来源于stack exchange,提问作者tema

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:47:52