如何在记录后重定向人员

时间:2011-09-17 16:46:35

标签: php http-headers url-redirection

我正在使用以下功能在特定任务后重定向一个人(例如:登录后,登出后,搜索后等) 代码如下:

<?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。请帮助我任何人

5 个答案:

答案 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响应代码,需要在尝试使用标头重定向时指定。

尽管刷新方法与旧浏览器存在兼容性问题,但刷新方法也可以正常工作。

http://en.wikipedia.org/wiki/HTTP_302

http://php.net/manual/en/function.header.php

答案 3 :(得分:0)

如果已经发送了标题,则可能是因为内容已经写入屏幕(通过回声,打印或类似内容)。由于你的类无法控制实例化之前发生的事情并调用了函数,因此你似乎不太可能做很多事情来避免你的客户端PHP(什么叫你的类)之前写出任何东西。使用Javascript或使用Apache redirects

答案 4 :(得分:-2)

最简单的方法是通过客户端进行。的JavaScript ...

window.location= url