如何在不带函数的PHP中设置和检索动态全局变量

问题描述 投票:0回答:1

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

  • jam:用于标识唯一数据的参数,该数据实际上可以是任何文本字符串(包括数字)。此值附加到字符串“ jam”以创建动态变量名称。因此?jam = 123导致全局变量jam123。同样,因此?jam = Booboo会导致全局变量jamBoob​​oo。

  • section:将上述全局变量设置为的值(必须为数字)。因此,如果传递了[[?jam = Booboo&section = 4,则全局变量jamBoob​​oo的值将设置为4。

想法是,一旦为每个动态命名的果酱(jamXXXX)设置了值,任何以后指定相同果酱的请求都应输出该设置值。例如,在使用参数

?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个回答
0
投票
如果我没记错的话,您似乎希望$GLOBALS在2个不同的PHP请求之间仍然存在。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.