我正在尝试保护PHP不被其他页面调用。为了做到这一点,我在初始页面中设置了一个常量,并在后续页面中检查它是否存在。到目前为止,这种方法运作良好。现在我有一种需要设置条件常量的情况。在第一个文件中,设置值常量值 - 即
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'。实际上它是创建的,但在此函数之外不存在,几乎击败了它的目的。
为了测试这个,我在代码中添加了一些'echo'。
define('FOO','bar');
$vld = $_GET['pageno'];
if ($vld>2)
{
echo $vid;
echo '<br />';
echo FOO;
define('FOO2', bar2');
echo '<br />' ;
echo FOO2;
}
将值3传递到此页面会产生以下输出:
3
巴
BAR2
正是你所期望的。但是,该程序的第二部分不起作用。
所以我在第二部分插入了一些类似的'echo'语句:
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
巴
BAR2
但第二部分明显不同:
巴
BAR2
这里发生了什么????
我该如何解决?
答案 0 :(得分:1)
您的脚本没有问题,如果我理解正确您的意思是您将一个页面包含在另一个页面中。
在第一部分:
if (!defined('FOO')){
echo "Hack Attack"; // Echoed when FOO is not defined
} else {
echo FOO; // Echoed when FOO is defined
echo '<br />';
}
它回显"bar2"
因为您只回显是FOO
定义。
但是第二部分回应了"FOO2"
,因为只有当FOO2
未定义时才回显它。
if (defined('FOO2')){
echo "Do Something Else"; // Echoed when FOO2 is defined
} else {
echo FOO2; // Echoed when FOO2 is not defined
}
当您尝试回显未定义的常量时,您将只获得它的名称。
答案 1 :(得分:0)
文字'bar2'
写为bar2'
,并且在您的示例中缺少一个在if
语句中定义bar2的开始标记:
define('FOO','bar');
$vld = $_GET['pageno'];
if ($vld>2)
{
echo $vid;
echo '<br />';
echo FOO;
//Are you sure this is what you want - bar2' without a beginning tick?
define('FOO2', bar2');
echo '<br />' ;
echo FOO2;
}