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; }