我已经获得了这个小片段功能,可以在不更改网址的情况下将访问者重定向到我的恶作剧页面:
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 ...
编辑:解决方案是明确的cookie。与实际代码无关。
答案 0 :(得分:1)
$date_array
变量超出april_fools()
功能的范围。您需要使用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_array[2]
)作为参数传递。
或者如Niet the Dark Absol所述,无论范围如何,都将其作为参数传递给此函数。
答案 1 :(得分:1)
虽然@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_reporting()