【问题标题】:PHP Redirect to different url using header("Location:") does not workPHP 使用 header("Location:") 重定向到不同的 url 不起作用
【发布时间】:2022-01-16 08:28:39
【问题描述】:

我对 php 很陌生,我做了一些研究并尝试了某人else's solution,但它对我没有用。我想在执行特定代码后将用户重定向到另一个页面。我意识到没有错误消息,并且站点没有更改。所以我从代码中删除了几乎所有内容并将其放入一个小的 test.php 文件中。 同样的问题仍然存在。

<!DOCTYPE html>
<html>
    <body>
        <h1>Tes2</h1>

        <?php
        // Execute some code here
        sleep(10); // Give the user 10 seconds to read the output of my code
        // redirect the user with php or trigger a JS script to do that
        header("Window-target: _parent");
        header("Location: https://www.w3schools.com/");
        ?>

    </body>
</html>

期望:页面应该执行主要的 php 脚本(由注释可视化)并触发一个计时器。当计时器结束时,它应该将我重定向到“www.w3schools.com”。应该没有错误或其他消息。如果可能的话,重定向应该由 php 代码完成(JS 可能是解决这个问题的一种方法,但我仍然需要在我的 php 代码执行后启动 JS 代码)。

结果:页面显示并加载了 html 代码。该网站保持不变。没有错误。

环境:在 Chromium 上运行 适用于 Linux Mint(64 位)的版本 96.0.4664.45(Offizieller 构建) 该网站功能正常,并按预期执行 PHP 代码,但不是这个。

是否有一种重量轻且通用(适用于大多数流行浏览器)的解决方案将用户重定向到另一个页面?

【问题讨论】:

  • @NVRM 似乎我对“我想在执行特定代码后将用户重定向到另一个页面”不够清楚。用户完成表单后,我必须执行 php 脚本。之后,我可以重定向页面
  • 是的,就是这样。试试看。
  • 在您已经输出了一些 HTML 之后,您不能发送 Location 标头(或任何响应标头)。您应该会收到“标头已发送”通知,但您的错误报告级别可能会隐藏它。将 php 代码移动到您的文档类型上方,您的重定向应该可以工作。
  • 通常人们会指定他们想要的行为,而不是指定必须如何实现。通常,对他们无法完成的非常具体的实现的请求是 XY 问题的标志。你并没有真正说为什么它必须用 PHP 而不是 JavaScript 来完成,尽管我认为你已经在上面阐明了这一点。但无论如何,我已经向您展示了如何让 PHP 版本立即运行

标签: javascript php web url backend


【解决方案1】:

标题必须在传输任何数据之前设置,因此您不能只将它们粘贴在文件中间。引用the manual

请记住,必须在发送任何实际输出之前调用 header(),无论是通过普通 HTML 标记、文件中的空白行还是通过 PHP。

因此,至少您需要将文件重写为:

<?php

  header("Window-target: _parent");
  header("Location: https://www.w3schools.com/");

?>
<!doctype html>
...  

此外,永远不要在 http(s) 响应中使用 sleep():该响应应该尽快完成,无论它需要生成什么内容。睡眠在(实际上任何)PHP 代码中都没有位置。

【讨论】:

  • 好答案,感谢您的帮助
【解决方案2】:

PHP 和 JS 的组合似乎是最简单的解决方案。但这可能只是我的看法。我试图尽可能地记录代码,以便其他人能够理解:

 <?php
        function redirect() {   // Create some JS code which will pause for 3 seconds and execute the move function afterwards. This Function will redirect the user
            echo "<script>";
            echo "function move() {window.location.replace('http://www.w3schools.com');}";
            echo "setTimeout(move, 3000);";
            echo "</script>";
        }
    ?>
    
    <!DOCTYPE html>
    <html>
        <head>
        </head>
        <body>
            <h1>Test2</h1>
            <?php
            echo "<p>You will be redirected after the code has been executed!</p>";
            // Run actual code
            redirect();     // Redirect using JS code
            ?>
        </body>
    </html>

【讨论】:

    猜你喜欢
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    相关资源
    最近更新 更多