我有以下代码,其中我在页面上使用某些条件打开或重定向到任何其他网址,但调用网址的PHP方法在这里不起作用请任何人帮助我如何摆脱这个问题 这是我的PHP代码
<?php
$good_domains = array("http://172.17.0.221:84/cp.aspx","http://172.17.0.221:84/cp.aspx");
if(!in_array($_SERVER['HTTP_REFERER'],$good_domains)){
echo "<script>alert(\"NO\");</script>";
Redirect('http://www.google.com.pk');
}
else{
echo "<script>alert(\"YES\");</script>";
//echo $_SERVER['HTTP_REFERER'];
//Redirect('http://www.shakarganj.com.pk');
$URL="http://www.google.com";
header ("Location: $URL");
}
?>
当我运行页面时,会生成以下错误。
Warning: Cannot modify header information - headers already sent by (output started at C:\xampplite\htdocs\a\sfpl\MT.php:9) in C:\xampplite\htdocs\a\sfpl\MT.php on line 15
答案 0 :(得分:5)
如果您已向浏览器发送信息,则无法执行基于标头的重定向,您对echo
的调用即可。您必须移除对echo
的来电,并确保第一个</php
代码前面没有空格。
答案 1 :(得分:3)
直接来自header()
help page here:
请记住,在任何实际输出之前必须调用header() 通过普通HTML标记,文件中的空行或PHP发送。 使用include()或require()读取代码是一个非常常见的错误, 函数或其他文件访问函数,并且有空格或空 调用header()之前输出的行。
您echo
声明两侧的if
脚本标记 - 您需要在重定向端删除它们
答案 2 :(得分:3)
除上述答案外 - 如果您使用JS显示 YES / NO 警告,为什么使用PHP进行重定向?
您可以在JS中重定向用户:
alert("NO"); document.location.replace("http://google.co.uk");
// otherwise
alert("YES"); document.location.replace("http://google.com");
如果您希望在重定向用户之前有延迟,可以使用setTimeout
功能:
alert("NO");
// wait 5 seconds before redirect
setTimeout(5000, function()
{
document.location.replace("http://google.co.uk");
});
答案 3 :(得分:2)
由于您已经完成了echo
语句,因此PHP无法再向输出发送标题。
您必须确保在对页面的任何其他输出之前执行任何header()
次调用。
答案 4 :(得分:2)
这是一个标准错误;标头发送http标头和 在输出启动时,标题已经发送
在这种情况下,您可以通过使用输出缓冲来避免此问题(检查http://php.net/ob_start);您需要在服务器上启用该选项并检查缓冲区大小
答案 5 :(得分:2)
在索引文件的顶部添加:
ob_start();
如果我没弄错的话,这将删除此警告。
答案 6 :(得分:0)
使用
echo '<META HTTP-EQUIV="refresh" content="0; URL=your_url">';