我正在使用以下功能在特定任务后重定向一个人(例如:登录后,登出后,搜索后等) 代码如下:
<?php
class common {
/* Redirect to another page
* $url= Url to go
*/
function redirection($url){
header("location: $url");
exit();
}
// Some other function below
?>
但现在我正在与许多不同主持人(MLM项目)的项目一起处理这个课程。我现在有问题。对于某些服务器,它可以像我预期的那样工作,但在其他服务器中,它不会重定向。如果我启用error_reporting(E_ALL)
;我发现了headers are already send
的通知。所以我很困惑我现在可以做什么而不是header()
功能。我也试过下面的代码
<?php
function redirection($url){
echo "<div align='center'><a href='$url' target='_top'><img src='../img/proceed.jpg' alt='Proceed>>' align='absmiddle' border='0'></a></div>";
exit();
}
?>
但这并不可取,因为每个人都想要自动重定向。我的服务器是windows和linux。请帮助我任何人
答案 0 :(得分:3)
在应用程序的第一行使用ob_start();
<?php
class common {
/* Redirect to another page
* $url= Url to go
*/
function redirection($url)
{
header("location: $url");
exit();
}
// Some other function below
}
?>
<?php
ob_start("redirection");
// Your Common Class Page
include("Common.php");
// some code
ob_end_flush(); // turn off output buffering
?>
答案 1 :(得分:1)
解决此问题的一种方法是在调用标头(位置)之前测试标头是否已经发送。您可以使用两种解决方案:
<?php
class common {
/* Redirect to another page
* $url= Url to go
*/
function redirection($url){
if (!headers_sent()) {
header("location: $url");
} else {
echo "<div align='center'><a href='$url' target='_top'><img src='../img/proceed.jpg' alt='Proceed>>' align='absmiddle' border='0'></a></div>";
}
exit();
}
// Some other function below
?>
这样,如果尚未发送标头,则会自动重定向。如果有,请让客户点击。
这就是为什么当你在大多数网站上看到重定向通知时,它还包括一句话 - 如果你没有自动重定向,请点击这里......
希望这有帮助。
祝你好运!答案 2 :(得分:0)
我会尝试使用:
header("Location: ".$url, TRUE, 302);
如果您想使用其他方法,或称为“刷新”方法,
header("Refresh:0;url=".$url);
两者都适用于每种情况。标题的问题是,您需要让他们知道它是302重定向,并设置 TRUE 来替换现有标头。如果已设置标头,则需要使用 TRUE 布尔值替换它。
302也是重定向的常见HTTP响应代码,需要在尝试使用标头重定向时指定。
尽管刷新方法与旧浏览器存在兼容性问题,但刷新方法也可以正常工作。
答案 3 :(得分:0)
如果已经发送了标题,则可能是因为内容已经写入屏幕(通过回声,打印或类似内容)。由于你的类无法控制实例化之前发生的事情并调用了函数,因此你似乎不太可能做很多事情来避免你的客户端PHP(什么叫你的类)之前写出任何东西。使用Javascript或使用Apache redirects。
答案 4 :(得分:-2)
最简单的方法是通过客户端进行。的JavaScript ...
window.location= url