【问题标题】:What's a good way to refresh a page with PHP?用 PHP 刷新页面的好方法是什么?
【发布时间】:2012-09-28 03:24:26
【问题描述】:

这看起来应该很简单,但我遇到了一些麻烦。

我有一个索引页面,它既是登录页面又是主要内容页面,这取决于是否设置了会话变量。

我尝试使用从 PHP 回显的 JavaScript 来处理重定向,但它看起来很草率并且需要一点时间,所以我改用 header("location:abc.php")。将它用于索引页面的问题是它在发送输出后不起作用。我也尝试过使用元标记来刷新页面,但这并不适用于所有浏览器。

处理这种情况的最佳方法是什么?

提前致谢。

【问题讨论】:

  • 您可以在内容生成后使用输出缓冲发送标头。
  • 答案很简单,对我来说很明显:在决定是否需要重定向之前不要发送任何输出。

标签: php javascript redirect header meta


【解决方案1】:

您可以使用其中任何一个。但是,header("location: abc.php") 发送响应后将不起作用!解决方法很简单。使用输出缓冲。

<?php
ob_start()

//here goes many lines of your wonderful php code blocks

//now send the header based on your logic
header("location: abc.php")

ob_end_flush()

请查看official docs了解更多信息

更新: 你可以考虑@zerkms 的建议。如果您确实需要静默重定向到其他页面,请在使用 header() 函数发送任何输出之前执行此操作。但是,如果你想表明你正在重定向他/她,你可以使用你之前使用的 javascript!对于后者,也可以使用Meta Refresh

<meta http-equiv="refresh" content="5;URL='http://example.com/'">

ob_start() 将对此有所帮助。因为,您可能会在页面上显示很多东西,然后告诉他/她将被立即重定向。上面的示例将在 5 秒内将用户重定向到 example.com。

【讨论】:

  • 您提出的解决方法毫无意义。如果您想重定向用户 - 没有理由输出任何内容。是的,就是这么简单。
  • 您的观点有效!但是,请检查他说发送输出后它不起作用的问题。
  • 对不起,我不是很清楚。我举例说明了我如何在其他页面上重定向,也许这无关紧要。我不是在尝试重定向,而是在尝试刷新同一页面。
【解决方案2】:
<?php
session_start();

//all of the php code goes here

header("location: samepage.php")

?>

确保您的所有 php 代码都在浏览器的顶层,并且不使用任何 echo 命令 - 否则您最终会在页面顶部显示 echo 的内容 - 而不是使用 echo 命令使用变量必要时在 html 正文中使用变量更可靠。

【讨论】:

    【解决方案3】:

    这是你想要的吗?

    <?php
    session_start();
    
    if ($_SESSION['logged_in']) {
      header("Location: mainpage.php");
      exit();
    }
    
    // Display login form
    

    【讨论】:

      【解决方案4】:

      你可以试试这个

      JAVASCRIPT

      function timedRefresh(timeoutPeriod) {
      setTimeout("location.reload(true);",timeoutPeriod);
       }
      

      HTML

       <!--The page will refresh every 5 seconds.-->   
       <body onload="timedRefresh(5000)">
      

      【讨论】:

      • @HiggsBoson 你在找什么?
      • 这基本上是我现在使用的,虽然它很慢,因为整个页面在执行 js 之前加载到浏览器中:/
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      相关资源
      最近更新 更多