【问题标题】:Redirect to specified URL on PHP script completion?在 PHP 脚本完成时重定向到指定的 URL?
【发布时间】:2010-09-26 02:40:03
【问题描述】:

如何让 PHP 函数在运行完成后转到特定网站?

例如:

<?php
  //SOMETHING DONE
  GOTO(http://example.com/thankyou.php);
?>

我真的很想要以下...

<?php
  //SOMETHING DONE
  GOTO($url);
?>

我想做这样的事情:

<?php
  //SOMETHING DONE THAT SETS $url
  header('Location: $url');  
?>

【问题讨论】:

    标签: php url


    【解决方案1】:

    如果“SOMETHING DONE”不涉及任何通过 echo/print/etc 的输出,则:

    <?php
       // SOMETHING DONE
    
       header('Location: http://stackoverflow.com');
    ?>
    

    【讨论】:

      【解决方案2】:
      <?php
      
      // do something here
      
      header("Location: http://example.com/thankyou.php");
      ?>
      

      【讨论】:

        【解决方案3】:
        <?
        ob_start(); // ensures anything dumped out will be caught
        
        // do stuff here
        $url = 'http://example.com/thankyou.php'; // this can be set based on whatever
        
        // clear out the output buffer
        while (ob_get_status()) 
        {
            ob_end_clean();
        }
        
        // no redirect
        header( "Location: $url" );
        ?>
        

        【讨论】:

        • 你打败了我。值得一提的是,由于只有在没有生成输出的情况下才能发送标头,所以可能需要将整个页面/应用程序包装在 ob_start() 中。
        • 当我尝试这个时,我收到了这个错误:“警告:无法修改标头信息 - 标头已由(输出开始于 example.php:1)发送”你知道为什么会发生这种情况吗?
        • 这意味着你在 ob_start() 之前或 ob_end_clean() 块之后输出一些东西。输出缓冲(ob_* 函数)负责缓冲任何输出,允许您使用它或(如在本例中)稍后丢弃它。把你的代码放在 //do stuff here
        • 应该no redirectnow redirect
        【解决方案4】:

        请注意,这不起作用:

        header('Location: $url');
        

        你需要这样做(用于变量扩展):

        header("Location: $url");
        

        【讨论】:

          【解决方案5】:

          您总是可以只使用标签来刷新页面 - 或者只是将必要的 javascript 放入页面末尾,这会导致页面重定向。您甚至可以将其放入 onload 函数中,因此一旦完成,页面就会被重定向

          <?php
          
            echo $htmlHeader;
            while($stuff){
              echo $stuff;
            }
            echo "<script>window.location = 'http://www.yourdomain.com'</script>";
          ?>
          

          【讨论】:

          • 这对我来说效果很好 - 由于 CMS 区域发生了很多事情,标头已经发送,这非常完美
          • 简单而精彩,感谢这个有用的答案!
          【解决方案6】:

          不要忘记在调用后放置一个“die”,以便在页面上的其余代码运行之前发生重定向。 一种。如果您在页面下方有标题功能,它们将覆盖代码上方的标题功能。

          b:我假设您不希望页面上的其余代码运行,这就是为什么您首先放置此重定向的原因 [也许]。

          示例:

          <?php
          
          // do something here
          
          header("Location: http://example.com/thankyou.php");
          die();
          
          //code down here now wont get run
          
          ?>
          

          【讨论】:

            【解决方案7】:

            这是“标头已发送”问题的解决方案。假设您正在验证并通过电子邮件发送表单。确保 php 代码是您页面上的第一件事……在任何 doctype 和 head 标签以及所有爵士乐之前。然后,当 POST 回到页面时,php 代码将首先出现,不会遇到 headers 已经发送的问题。

            【讨论】:

              猜你喜欢
              • 2011-02-08
              • 1970-01-01
              • 2021-05-18
              • 1970-01-01
              • 2011-11-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多