PHP die()显示简短的白屏

时间:2017-01-26 10:28:03

标签: php redirect http-headers

我使用重定向功能将访问者重定向到某个页面,因为他们无法访问当前页面。功能如下:

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

重定向功能链接到:

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

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

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

3 个答案:

答案 0 :(得分:3)

问题与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的默认值,因为重定向到空网址没有多大意义)

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

我对上一个版本感到失望。帖子。关于die()!

发送标头时,浏览器需要一些时间才能采取措施。在这段时间之间,PHP进程将在您被重定向之前调用die()。这是阿育王位置和重定向 这样它会显示一个黑页,然后您/访客将被重定向。

好:将die()设置为结束过程,以避免程序内部进一步动作

坏:首先是空白页。

这取决于您的浏览器环境!例如:一个非常慢的工作站将向您显示此行为,您必须在意。想象浏览器确实知道标头重定向(今天(大多数情况下)不再存在)

要使浏览器采取措施,请执行以下操作:

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

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