PHP页面redirect
PHP执行一个函数后可以redirect吗? 我正在创build一个完成的function,我希望它redirect到位于同一根文件夹中的文件。 可以这样做吗?
if { //i am using echo here } else if ($_SESSION['qnum'] > 10) { session_destroy(); echo "Some error occured."; //redirect to user.php }
是的,你会使用标题function。
header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */ exit();
调用exit()
是一个很好的习惯,所以下面的代码不会被执行。
另外,从文档:
请记住,在发送任何实际输出之前,必须调用header(),可以使用普通的HTML标记,文件中的空行或PHP。 使用include()或require()函数或其他文件访问函数读取代码并在调用header()之前输出空格或空行是非常常见的错误。 使用单个PHP / HTML文件时也存在同样的问题。
这意味着你不应该在header()
函数之前回应任何东西,因为这样做很可能会抛出错误。 此外,您还需要validation此代码是否在任何其他输出之前运行。
使用JavaScript作为故障保护将确保用户被redirect(即使头已经被发送)。 干得好:
// $url should be an absolute url function redirect($url){ if (headers_sent()){ die('<script type="text/javascript">window.location.href="' . $url . '";</script>'); }else{ header('Location: ' . $url); die(); } }
如果你需要正确处理相对path,我已经写了一个函数(但这不在问题的范围之内)。
$url='the/url/you/want/to/go'; echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$url.'">';
这对我很好。
简单的方法是使用:
echo '<script>window.location.href = "the-target-page.php";</script>';
header( "Location: http://www.domain.com/user.php" );
但是你不能先做回声,然后redirect。
<?php http_redirect("relpath", array("name" => "value"), true, HTTP_REDIRECT_PERM); ?>
是。
实质上,只要没有输出任何东西,你可以做任何你想要的(杀死一个会话,删除用户cookies,计算Pi'n'数字等),然后发出位置标题。
我可能将消息设置为会话variables,将用户redirect到显示消息并销毁会话的另一个页面。
PHP中的header()
函数执行此操作,但要确保在将任何其他文件内容发送到浏览器之前调用它,否则您将收到错误。
如果您已经发送了文件内容,JavaScript是一种替代方法。
实际上,我发现这在基于PHP的cms代码。
redirect('?module = blog',0);
所以这是可能的。 在这种情况下,您是在pipe理员级别login的,所以不会造成犯规(我想)。 第一部分是url,第二部分? 我找不到什么整数是什么文件,但我想这是时间或数据,因为它是附加到表单。
我也想在事件之后刷新页面,把它放在一个更好的位置上,效果很好。
你可以使用这个代码在PHP中redirect
<?php /* Redirect browser */ header("Location: http://example.com/"); /* Make sure that code below does not get executed when we redirect. */ exit; ?>
如果你想在你的php文件中包含redirect,而不需要在顶部,你可以在顶部激活输出缓冲,然后在页面的任何地方调用redirect。 例;
<?php ob_start(); //first line ... do some work here ... do some more header("Location: http://www.yourwebsite.com/user.php"); exit(); ... do some work here ... do some more
正如nixxx所述,在添加任何php代码之前添加ob_start()
将会阻止已经发送的头文件错误。
它为我工作
下面的代码也适用。 但是,它首先加载页面,然后redirect时,我使用它。
echo '<META HTTP-EQUIV=REFRESH CONTENT="1; '.$redirect_url.'">';
header()函数做到这一点:
标题(“Location:user.php”);
我研究这个,我发现有关这个答案
https://stackoverflow.com/questions/13539752/redirect-function/13539808
function redirect_url($path) { header("location:".$path); exit; }