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

WordPress自定义PHP脚本仅取消echo注释时可正常运行

问题根本原因

这个异常是逻辑错误叠加导致的,取消echo "Connected successfully";的注释脚本能正常运行纯粹是巧合:

  • HTTP协议规定所有响应头必须在响应体内容之前发送,一旦输出了任何实际内容(包括echo的文本、空行、报错信息),PHP会自动把已设置的响应头发给客户端,之后无法再修改响应头。
  • 你当前的代码在调用header()发送重定向头后,没有立刻终止脚本运行,仅调用了ob_end_flush()。当你注释掉echo行时,输出缓冲区是空的,ob_end_flush()不会触发HTTP头的实际发送,后续WordPress的page.php模板会继续执行渲染逻辑,默认返回200状态的正常页面,覆盖掉你之前设置的302重定向头,浏览器收不到跳转指令,看起来就像脚本没运行。
  • 当你取消echo的注释,输出的文本填充了缓冲区,调用ob_end_flush()时会强制把重定向头和缓冲区内容一起发给客户端,后续WordPress逻辑已经无法修改已发送的响应头,浏览器收到重定向指令就会正常跳转,造成「脚本正常工作」的假象。
  • 额外注意:你代码里的$mysqli->mysqli_real_escape_string()是错误调用,mysqli面向对象写法对应的转义方法是$mysqli->real_escape_string(),这行本身会触发致命错误,必须一并修正,否则在不同错误显示配置下会出现额外异常。
修复方法
  1. 首先修正mysqli转义方法的错误调用,和你当前面向对象的代码风格保持一致:
$urlId = $mysqli->real_escape_string($_GET['uid']);
  1. 重定向逻辑不要依赖输出缓冲的巧合触发,发送重定向头后立刻调用exit终止脚本执行,避免WordPress后续逻辑覆盖响应头。WordPress环境下优先用自带的wp_redirect()函数处理跳转,会自动符合HTTP规范、做基础安全校验。
  2. 修正后的核心跳转逻辑示例:
if (mysqli_num_rows($result) > 0)
{
    $url = "https://thisismywebsite.com/?valid=1&uid=". $_GET['uid'];
    wp_redirect($url);
    exit; // 所有重定向后必须加退出,不能省略
} 
else
{
    $url = "https://thisismywebsite.com/?valid=0&uid=". $_GET['uid'];
    wp_redirect($url);
    exit;
}

如果不用WordPress自带函数,原生PHP写法要注意Location头的冒号后加空格,规范写法为header("Location: " . $url);,之后同样必须加exit。开头手动写的ob_start()在正确加了exit的情况下不是必须的,WordPress本身已经内置了输出缓冲机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:51:15