PHP重定向不工作
我有一个小片段功能,可以在不更改URL的情况下将访问者重定向到我的恶作剧页面: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(".
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地理位置的语言预设:)