0

我正在尝试为 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”视为当前状态。它永远不会改变。

如果我正确地解释这意味着在初始化引导文件中编写全局变量会覆盖以后的更改,那么为 CakePHP 应用程序编写动态 GLOBAL 初始值的最佳位置是哪里?如果我错了,有没有人看到我错过了什么?

提前感谢您的帮助!

4

1 回答 1

0

好的,所以。我相信我遇到的问题是我误解了 PHP 和 JavaScript 的运行方式。PHP 在页面加载到服务器端之前运行,然后运行完成。这意味着我的 PHP 全局变量是“每次执行”变量。当 JavaScript 捕获事件并查看 PHP var 时,它只是在读取 PHP 变量,并且设置的代码已经运行并且不会再次运行。

基本上,我混淆了客户端与服务器端脚本。

这意味着有两种方法可以解决我的问题:(1) 使用某种持久性存储,也就是我检查和更新的文件或数据库表,而不是脚本变量,或者 (2) 我可以发出 AJAX 请求并将数据发布到服务器,导致服务器端代码与数据一起运行。

于 2013-03-27T00:25:39.910 回答