【问题标题】:PHP die() shows brief white screenPHP die() 显示短暂的白屏
【发布时间】:2017-06-11 19:17:50
【问题描述】:

当访问者无权访问当前页面时,我正在使用重定向功能将他们重定向到某个页面。函数如下:

$user->redirect('www.google.com');
die();

重定向功能链接到:

public function redirect($url="",$time=0) {
    header("Refresh: $time; url=$url");
}

每当您被重定向时,您会短暂地看到一个白页,然后是您被重定向到的页面。我假设白页是由die() 引起的。

我不喜欢它,我真的想摆脱它。

【问题讨论】:

  • 不,这是由 Refresh 标头引起的。为什么不能直接使用 Location 标头重定向用户?
  • 没有办法删除空白页,目前,服务器返回一个空白页,标题为'转到其他页面'。这个空白页面会一直存在,直到浏览器加载了下一页。你可以做的是输出一个静态页面,如果你不想要一个空页面,则输出一个像'redirecting, please wait'这样的消息

标签: php redirect http-headers


【解决方案1】:

问题与die() 调用无关,而是您发送了错误的标头来处理重定向。

不想做

public function redirect($url="",$time=0) {
    header("Refresh: $time; url=$url");
}

做:

public function redirect($url) {
    header("Location: $url", true);
}

甚至:

public function redirect($url, $temporal = false) {
    header("Location: $url", true, $temporal ? 302 : 301);
}

这样,您将发送状态代码“301”或“302”,以表明重定向是暂时的或永久的。默认为永久重定向,因为时间很少有用(尽管在您的情况下,由于权限的原因,临时重定向可能是有序的)

(我还删除了$url的默认值,因为重定向到空url没有多大意义)

【讨论】:

  • 哦,是的,这非常有效!不知道位置,谢谢教我!
【解决方案2】:

您可以只使用“位置:”,而不是使用“刷新:”标题。这样,页面就不必刷新,并且可能会导致您想要的行为。

public function redirect($url="/") {
    header("Location: $url");
}

编辑:添加默认的 $url '/' 以便如果没有给出 url 它会重定向到主页

【讨论】:

    【解决方案3】:

    我对上一页感到失望。帖子。这是关于 die() !

    发送标头时,浏览器需要一点时间来采取行动。在这段时间内,php 进程会在您被重定向之前调用 die()。这是异步的。定位和重定向 因此,它会向您显示一个黑页,然后您/访客会被重定向。

    好的:设置 die() 来结束进程以避免程序内部的进一步操作

    Bad:空白页优先。

    这取决于您的浏览器环境!例如:一个非常慢的工作站会向您显示这种行为,您必须关心。想象一下浏览器确实知道标头重定向(今天它(大部分)不存在了)

    要让浏览器更改以采取行动,请使用:

    function someaction() {
        // ... 
        $user->redirect('www.google.com');
        // which give the time for the browser  
        // without further execution of your code
        return; 
    }
    

    在这种情况下,访问者会在当前页面停留很长时间,直到浏览器知道 headers 或 cpu 很慢,但当它能够采取行动时会采取行动。

    【讨论】:

      猜你喜欢
      • 2011-10-03
      • 2012-10-30
      • 2015-10-03
      • 2011-04-10
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多