0

我试图保护 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

这里发生了什么????

我如何解决它??

4

2 回答 2

1

您的脚本没有问题,如果我理解正确,您的意思是您将一页包含在另一页中。

在第一部分:

if (!defined('FOO')){
  echo "Hack Attack"; // Echoed when FOO is not defined
} else {
  echo FOO; // Echoed when FOO is defined
  echo '<br />';
}

它会回显"bar2",因为您只会回显 when FOO is defined

但是第二部分会回显,因为您仅在未定义"FOO2"时才回显它。FOO2

if (defined('FOO2')){
  echo "Do Something Else"; // Echoed when FOO2 is defined
} else {
  echo FOO2; // Echoed when FOO2 is not defined
}

当您尝试回显未定义的常量时,您只会得到它的名称。

于 2013-01-08T00:50:52.710 回答
0

文字'bar2'写成bar2'并且在您的 example/s 中缺少一个在语句中定义 bar2 的起始刻度if

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;
}
于 2013-01-08T00:45:01.030 回答