PHP 不会执行一行代码,除非刷新页面两次


PHP will not execute a line of code unless you refresh the page twice

我正在尝试使一个网站同时具有Wix和独立的桌面版本。但是,当此网站加载到Wix iFrame中时,我遇到了Wix版本的问题。

当 IF 语句

为 true 时,用户应自动重定向,这意味着如果您在 Wix iFrame 中访问此网站,则必须执行以"header"开头的代码行,因为 IF 语句返回 true。

 if(isset($_GET[ 'instance' ], $_GET[ 'siteUrl' ], $_GET['locale']))
{       
    $value = 1;
    setcookie("IsWixUser", $value, time()+3600);
    header('Location: app.php?show=social_manager');
}
else
{
    $value = -1;
    setcookie("IsWixUser", $value, time()+3600);
}

当您第一次使用Wix加载我的网站时,情况并非如此,根本没有cookie。使用 firebug,我可以检查资源并看到 cookie "IsWixUser" 已被正确执行以保持 1 $value,因此 setcookie() 第一次运行良好,但浏览器只是决定跳过 header() 函数并且根本不执行它。

header() 函数仅在

刷新整个 Wix 页面以重新加载 iFrame 后才有效,最后 header() 函数仅在 cookie "IsWixUser" 过去设置为 1 时才有效。

这可能只是Drupal的问题吗?你在上面看到的那行代码在索引的顶部.php对于Drupal来说。

您的问题是,一旦任何其他标头(即cookie)被发送,您将无法使用位置标头重定向浏览器。删除 cookie 设置行,您将被重定向。

干杯

我并不是说这是您问题的答案,但是如果您确定自己做对了一切,请尝试使用 PHP 的 headers_sent 函数。如果没有,它至少会让你对正在发生的事情有所了解。

例如:

if (!headers_sent()) {
  header('Location: http://www.example.com/');
  //exit;
}

尝试将整个 URL 馈送到Location,就像 http://.... 一样。Drupal以有趣的方式工作,这两件事之一可能会有所帮助。