PHP重定向不工作

PHP重定向不工作,php,redirect,include,Php,Redirect,Include,我有一个小片段功能,可以在不更改URL的情况下将访问者重定向到我的恶作剧页面: function april_fools($session_id_string) { if(!isset($_SESSION['session_id']) || $_SESSION['session_id'] != $session_id_string) { $_SESSION['session_id'] = $session_id_string; include(".

我有一个小片段功能,可以在不更改URL的情况下将访问者重定向到我的恶作剧页面:

function april_fools($session_id_string)
{
    if(!isset($_SESSION['session_id']) || $_SESSION['session_id'] != $session_id_string)
    {
        $_SESSION['session_id'] = $session_id_string;
        include("./april_fools/" . $date_array[2] . ".php");
        exit();
    }
}
它应该做的是,它实际上包含恶作剧页面内容并执行它,然后在继续之前退出程序(不计算下一个代码)。不幸的是,这似乎不起作用:(它依赖于一年中的特定日期。愚人节的日期和会话标识符由以下代码段驱动:

$date_string = date("d-m-Y");
$date_array = explode("-", $date_string);

$session_id = base64_encode($visitor_ip . '/' . $_SERVER['HTTP_USER_AGENT'] . '/' . $date_string)
session_start();
而实际的“重定向”是通过调用前一个函数实现的:

if($date_array[0] == 1 && $date_array[1] == 4)
{
    april_fools($session_id);
}
但是函数不想工作,所以“重定向”不会发生。你知道如何让它工作吗?最好使用日期驱动的PHP


编辑:解决方案已清除cookies。与实际代码无关。

april\u愚人节()
函数中,
$date\u数组
变量超出范围。您需要使用
全局导入它

function april_fools($session_id_string)
{
    global $date_array;
    if(!isset($_SESSION['session_id']) || $_SESSION['session_id'] != $session_id_string)
    {
        $_SESSION['session_id'] = $session_id_string;
        include("./april_fools/" . $date_array[2] . ".php");
        exit();
    }
}
如果调用代码位于另一个方法中,则需要将年份(
$date\u array[2]
)作为参数传递


或者如前所述,将其作为参数传递给此函数,而不考虑作用域。

april\u fouls()
函数中,
$date\u数组
变量超出了作用域。您需要使用
global
导入它

function april_fools($session_id_string)
{
    global $date_array;
    if(!isset($_SESSION['session_id']) || $_SESSION['session_id'] != $session_id_string)
    {
        $_SESSION['session_id'] = $session_id_string;
        include("./april_fools/" . $date_array[2] . ".php");
        exit();
    }
}
如果调用代码位于另一个方法中,则需要将年份(
$date\u array[2]
)作为参数传递


或者如前所述,将其作为参数传递给此函数,而不考虑其作用域。

当@rollstuhlfahrer击中它的鼻子时,我会做一些不同的操作:

function april_fools($session_id_string){
  if(date('m') == 4 && date('d') == 1){
    if(!isset($_SESSION['session_id']) || $_SESSION['session_id'] != $session_id_string){
      $_SESSION['session_id'] = $session_id_string;
      include("./april_fools/" . date('Y') . ".php");
      exit();
    } else {
      echo 'Session already exists, Nothing to do..';
    }
  }
}

这是一个可变范围的问题,如果启用了
error\u reporting()

而@rollstuhlfahrer击中了它的鼻子,您会知道这一点,我会做得有点不同:

function april_fools($session_id_string){
  if(date('m') == 4 && date('d') == 1){
    if(!isset($_SESSION['session_id']) || $_SESSION['session_id'] != $session_id_string){
      $_SESSION['session_id'] = $session_id_string;
      include("./april_fools/" . date('Y') . ".php");
      exit();
    } else {
      echo 'Session already exists, Nothing to do..';
    }
  }
}

这是一个可变范围的问题,如果您启用了
错误报告()

,您会知道什么。当我尝试访问
/april\u愚人/2018.php
页面时,脚本本身可以工作。但是“重定向”不能工作。主重定向页面上出现了一些错误,但无法很好地说明问题(当我尝试访问
/april\u愚人/2018.php
页面时,脚本本身可以工作。但“重定向”无法工作。主重定向页面上出现了一些错误,但无法完全判断原因:(或者,更好的做法是,将其作为参数传递给函数。我对其进行了编辑,使函数将
$date\u array
变量作为第二个参数,但它仍然不起作用。我的意思是函数本身不起作用。它基本上跳过整个函数,然后继续。就像它不存在一样。可以发送包含需要注意的是…没有检查条件,但是代码没有其他问题。或者,更好的是,将其作为参数传递给函数。我对其进行了编辑,以便函数将
$date\u array
变量作为第二个参数,但它仍然不起作用。我的意思是函数本身不起作用。它基本上跳过了整个过程函数并在它之后继续。就像它不存在一样。可以发送包含一个要处理的完整页面…尚未检查条件,但代码没有其他错误。我在Windows上使用WAMP,并且默认情况下启用了
通知
错误
报告。没有更改默认行为弹出。如果报告处于打开状态,If语句
If(!isset($\u SESSION['…
不是真的。因为它肯定会给你一条关于未定义变量的信息消息。清除你的cookies,在浏览器上进行硬刷新。噢,糟糕的是,该死的cookies:D现在它工作了,谢谢你:D所以它会错误地重定向到页面(包括该页面,而不是原始页面),现在重新加载该页面实际上会将用户重定向到基于IP地理位置的语言预设:)我在Windows上使用WAMP,
注意
错误
报告已启用bz默认值。未更改默认行为。未弹出任何内容。如果报告已启用,则If语句
If(!isset($)\u会话['…
不是真的。因为它肯定会给你一条关于未定义变量的信息消息。清除你的cookies,在浏览器上进行硬刷新。噢,糟糕的是,该死的cookies:D现在可以工作了,谢谢你:D所以它会错误地重定向到页面(包括该页面而不是原始页面)现在重新加载页面实际上会将用户重定向到基于IP地理位置的语言预设:)