我正在尝试为CakePHP应用程序创建一个全局“ServerStatus”标志。我的想法是可以切换离线/在线模式进行维护,以便在将数据推送到服务器时,站点处于脱机状态。 我有一个JavaScript切换设置,以及重定向,但我遇到的问题是全局变量本身。
我在bootstrap.php文件中尝试了两件事:
(1)我用Configure Class写了初始状态,并且 (2)我使用$ GLOBALS数组来写入初始值。
当我尝试以后,稍后在激活切换时将状态更改为备用(非初始)值,它无法更改。据我所知,这意味着当我在bootstrap.php中编写一个全局变量时,它就像一个常量,初始值会在稍后覆盖更改。
切换是我默认布局default.ctp中的一个小脚本:
<script type="text/javascript">
var charInputs = [];
setInterval(clearInputBuffer(), 20000);
function keyPressHandler(event)
{
var currChar = String.fromCharCode(event.charCode);
charInputs.push(currChar);
//alert(currChar + ' key pressed!');
checkForKeyPhrases(charInputs);
}
function checkForKeyPhrases(chars)
{
// Get inputted chars as a sequence
var seq = "";
for (var i=0; i < chars.length; i++)
seq += chars[i] + "";
// Check for "Maintenance Mode"
if (seq == ":maintenance")
{
alert("Maintenance mode... go!");
<?php
if ($GLOBALS['ServerOnline'])
{
$GLOBALS['status'] = 'down';
$GLOBALS['ServerOnline'] = false;
}
else
{
$GLOBALS['status'] = 'up';
$GLOBALS['ServerOnline'] = true;
}
?>
var temp = '<?php echo $GLOBALS['status']; ?>';
alert('Current Server Status: ' + temp);
clearInputBuffer();
}
else if (seq.indexOf('clear') > -1)
clearInputBuffer();
}
function clearInputBuffer()
{ charInputs = []; }
</script>
在bootstrap.php中,我写了$GLOBALS['ServerOnline'] = true;
;但是当警报弹出时,它总是记录初始值为true,我将“down”视为当前状态。它永远不会改变。
如果我解释这个是正确的意思是在初始化引导程序文件中写一个全局会覆盖以后的更改,哪里是编写一个动态GLOBAL的CakePHP应用程序初始值的最佳位置? 如果我错了,有人看到我错过的东西吗?
提前感谢您的帮助!
答案 0 :(得分:0)
好的,好的。 我相信我遇到的问题是我误解了PHP和JavaScript的运行方式。 PHP在服务器端加载页面之前运行,然后运行完毕。这意味着我的PHP全局变量是“每次执行”变量。 当JavaScript捕获事件并查看PHP var时,它只是读取PHP变量并且设置代码已经运行并且不再运行。
基本上,我混淆了客户端与服务器端脚本。
这意味着有两种方法可以解决我的问题: (1)使用某种持久存储,a.k.a我检查和更新的文件或数据库表而不是脚本变量,或者 (2)我可以发出一个AJAX请求并将数据发送到服务器,导致服务器端代码与数据一起运行。