【问题标题】:How to set and retrieve dynamic global variables in PHP without functions如何在没有函数的 PHP 中设置和检索动态全局变量
【发布时间】:2019-10-15 01:01:37
【问题描述】:

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

  • jam:标识唯一数据的参数,它几乎可以是任何文本字符串(包括数字)。该值附加到字符串"jam" 以创建动态变量名称。所以?jam=123 导致全局变量jam123。同样,?jam=Booboo 导致全局变量 jamBooboo

  • section:上面提到的全局变量将被设置的值(必须是数字)。所以如果传递了?jam=Booboo&section=4,则全局变量jamBooboo的值设置为4

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

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

我已经尝试过下面的代码,但是当全局变量为 SET 时,我看到了初始值正确,但我没有看到它在后续请求中输出。我不确定 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
    }
?>

【问题讨论】:

    标签: php global-variables dynamic-variables


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 2012-04-19
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      相关资源
      最近更新 更多