如何在没有函数的情况下在 PHP 中设置和检索动态全局变量

How to set and retrieve dynamic global variables in PHP without functions

我正在尝试编写一个简单的页面,使用动态变量名称将一些数据保存到 GLOBAL 状态(存储在服务器内存中)。简单来说,查询字符串只能发送两个参数(仅限 GET)。

这个想法是,一旦为每个动态命名的 jam (jamXXXX) 设置了值,任何指定相同 jam 的未来请求都应该输出设置值。例如,在使用参数 ?jam=Booboo&section=4 调用页面后指定 ?jam=Booboo 的请求应该简单地输出 "4"。但是如果下一个请求是?jam=Booboo&section=6,那么后续请求应该输出"6".

这是在 AWS Lightsail LAMP 堆栈上的 PHP7 上设置的。我愿意使用另一个变量范围,如果它将持久存在服务器内存中(而不是 cookie)。

我已经尝试了下面的代码,但是当我看到初始值 正确 当全局变量被设置时,我没有看到它在后续请求中输出。我不确定 PHP 中是否缺少设置,或者我的代码是否以某种方式关闭。我也尝试过使用 global 关键字并在 php.ini 中寻找 register_globals 设置(当前不存在)。

<?php
    if(isset($_GET['jam']) == false){
        // Do nothing, it's a bad request - jam is a required variable
    }
    else if (isset($_GET['section'])  == false){ 
        // section is not specified, so output the global value of jam if it exists
        if(isset($GLOBALS["jam".$_GET['jam']])){
            echo $GLOBALS["jam".$_GET['jam']];
        }
    }
    else if (is_numeric($_GET['section'])){
        // section is specified and its a number so set the global value for jam to that number and output it
        $GLOBALS["jam".$_GET['jam']] = $_GET['section'];
        echo $GLOBALS["jam".$_GET['jam']];
    }
    else{
        // Do nothing, it's a bad request as none of the mandatory conditions have been met
    }
?>

如果我没记错的话,您似乎期望 $GLOBALS 在 2 个不同的 PHP 请求之间持续存在。

除非另行编程,否则每个 PHP 调用都会收到自己的内存 space,不会相互共享。因此,保存到 $GLOBALS 数组的变量将仅可用于该请求,并且在该请求结束时将立即被遗忘。对同一服务器(甚至是同一脚本文件)上的 PHP 代码的后续调用不会收到先前调用的 $GLOBALS 值。

您需要使用文件、缓存服务或数据库对持久存储进行编程。