我試圖保護一個PHP與其他頁面失序調用。爲了做到這一點,我在初始頁面中設置了一個常量,並在隨後的頁面中檢查它是否存在。直到現在,這一切都很順利。現在我有一種情況,我需要設置一個條件常量。在第一個文件,該值恆定值設置 - 即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到這個頁面會導致以下的輸出:
酒吧
BAR2你所期望的
什麼。但是,程序的第二部分不起作用。
所以我插入一些類似 '回聲' 語句進入第二部分:
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;
// }
結果是一樣的這部分前:
酒吧
BAR2
但第二部分顯着不同:
條
BAR2
這到底是怎麼回事????
我該如何解決?
常量僅存在於當前腳本的生命週期中。如果「下一頁」是另一個HTTP請求,則該常量不會被設置。相反,使用'$ _SESSION'。 –
@MichaelBerkowski但他們*不變*! ;) – alex
我也看到你正在定義一個名爲'$ vld'的變量,但後來使用'$ vid'。 –