发送REST数据后如何实现PHP header重定向?
很高兴你终于来提问啦!Stack Overflow的社区就是这样,先受益再回馈,很棒的开始😊
你遇到的header重定向失效问题,在PHP里其实挺常见的,我帮你梳理几个最可能的原因和解决办法:
1. 输出内容干扰了header发送
PHP的header()函数要求在任何实际输出(包括HTML标签、空格、换行甚至BOM头)之前调用。你的代码里,PHP是放在HTML表单之后的,这意味着浏览器已经收到了HTML内容,此时再发送Location头就会失效——因为HTTP头必须在响应体之前发送。
解决办法:
- 把你的PHP代码整个移到页面的最顶部,确保
<?php标签之前没有任何字符(包括空格、换行)。 - 或者开启输出缓冲,在PHP代码最开头加上:
这样所有输出会先存在缓冲区里,直到脚本结束或者你调用ob_start();ob_end_flush(),这时候header就能正常发送了。
2. 重定向后没有终止脚本执行
即使header发送成功,如果后续还有代码执行(比如echo错误信息),可能会导致浏览器忽略重定向。所以在header()之后一定要加上exit()或die()终止脚本:
if ($result) { header('Location: https://www.REDIRECTURL.com/thank-you/'); exit(); // 加上这个! }
3. $result的判断逻辑有漏洞
你的代码里if ($result)的判断可能不够严谨:
- 如果curl请求失败,
curl_exec()会返回false,json_decode(false)得到null,这时候if ($result)不会成立,自然不会执行重定向。 - 你需要先检查curl是否成功,再处理返回结果:
$result = curl_exec($curl); curl_close($curl); // 先检查curl是否执行成功 if ($result === false) { writeToLog(curl_error($curl), 'Curl Error'); // 这里可以处理错误,比如提示用户 } else { $result = json_decode($result, 1); writeToLog($result, 'webform result'); // 再判断CRM是否返回成功(根据CRM的实际返回结构调整) if (isset($result['id']) || !isset($result['error'])) { header('Location: https://www.REDIRECTURL.com/thank-you/'); exit(); } else { echo "Error al enviar la solicitud: ".$result['error_description'].'<br/>'; } }
4. 检查是否有隐性输出
比如你的PHP文件末尾的?>之后如果有空格或换行,也会被当作输出。建议直接去掉?>(PHP会自动识别脚本结束),避免这种隐性输出。
把这些调整后,你的重定向应该就能正常工作了!
内容的提问来源于stack exchange,提问作者ponline
相关产品推荐
相关产品推荐

