【发布时间】: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