我正在尝试编写一个简单的页面,该页面将使用动态变量名称将某些数据保存到GLOBAL状态(存储在服务器内存中)。简而言之,查询字符串只能发送两个参数(仅GET)。
jam:用于标识唯一数据的参数,该数据实际上可以是任何文本字符串(包括数字)。此值附加到字符串“ jam”以创建动态变量名称。因此?jam = 123导致全局变量jam123。同样,因此?jam = Booboo会导致全局变量jamBooboo。
section:将上述全局变量设置为的值(必须为数字)。因此,如果传递了[[?jam = Booboo&section = 4,则全局变量jamBooboo的值将设置为4。
?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
}
?>
$GLOBALS
在2个不同的PHP请求之间仍然存在。除非另有编程,否则每个PHP调用都将获得自己的不相互共享的内存空间。因此,保存到$GLOBALS
数组的变量仅可用于该请求,并且在该请求结束时将立即被忘记。在同一服务器(甚至同一脚本文件)上对PHP代码的后续调用未收到先前调用的$GLOBALS
值。
您需要使用文件,缓存服务或数据库对持久性存储进行编程。