我试图保护 PHP 不被其他页面乱序调用。过去为了做到这一点,我在初始页面中设置了一个常量,并检查它是否存在于后续页面中。到目前为止,这一直运作良好。现在我遇到了需要设置条件常数的情况。在第一个文件中,设置了 values 常量值 - 即
define('FOO','bar');
define('FOO2', 'bar2');
在下一页中,我检查了常量:
if (!defined('FOO'))
{
echo "Hack Attack";
}
if (defined('FOO2'))
{
echo "Do Something Else";
}
这工作正常。问题是'FOO2'需要像这样有条件:
define('FOO','bar');
$vld = $_GET['pageno'];
if ($vld>2)
{
define('FOO2', bar2');
}
现在,在我看来这应该可行,并且如果我将大于 2 的数字传递到页面中,则应该创建常量 'foo2'。事实上它是被创建的,但不存在于这个函数之外,几乎违背了它的目的。
为了测试这一点,我在代码中加入了一些“回声”。
define('FOO','bar');
$vld = $_GET['pageno'];
if ($vld>2)
{
echo $vid;
echo '<br />';
echo FOO;
define('FOO2', bar2');
echo '<br />' ;
echo FOO2;
}
将值 3 传递到此页面会导致以下输出:
3
酒吧
酒吧2
正是你所期望的。但是,程序的第二部分不起作用。
所以我在第二部分插入了一些类似的“回声”语句:
if (!defined('FOO'))
{
echo "Hack Attack";
} else {
echo FOO;
echo '<br />';
}
if (defined('FOO2'))
{
echo "Do Something Else";
} else {
echo FOO2;
}
这里的结果是:
酒吧
FOO2
不是我所期望的。所以我删除了第一部分中的条件并重新运行了两个部分:
define('FOO','bar');
$vld = $_GET['pageno'];
// if ($vld>2)
// {
echo $vid;
echo '<br />';
echo FOO;
define('FOO2', bar2');
echo '<br />' ;
echo FOO2;
// }
这部分的结果与以前相同:
3
酒吧
酒吧2
但第二部分明显不同:
酒吧
酒吧2
这里发生了什么????
我如何解决它??