如何在没有函数的情况下在 PHP 中设置和检索动态全局变量
How to set and retrieve dynamic global variables in PHP without functions
我正在尝试编写一个简单的页面,使用动态变量名称将一些数据保存到 GLOBAL 状态(存储在服务器内存中)。简单来说,查询字符串只能发送两个参数(仅限 GET)。
jam
:标识一条唯一数据的参数,几乎可以是任何文本字符串(包括数字)。此值附加到字符串 "jam"
以创建动态变量名称。所以 ?jam=123
导致全局变量 jam123
。同样,So ?jam=Booboo
导致全局变量 jamBooboo
.
section
:上面提到的全局变量将被设置的值(必须是数字)。所以如果传了?jam=Booboo§ion=4
,全局变量jamBooboo
的值就设置为4
.
这个想法是,一旦为每个动态命名的 jam
(jamXXXX
) 设置了值,任何指定相同 jam
的未来请求都应该输出设置值。例如,在使用参数 ?jam=Booboo§ion=4
调用页面后指定 ?jam=Booboo
的请求应该简单地输出 "4"
。但是如果下一个请求是?jam=Booboo§ion=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
值。
您需要使用文件、缓存服务或数据库对持久存储进行编程。
我正在尝试编写一个简单的页面,使用动态变量名称将一些数据保存到 GLOBAL 状态(存储在服务器内存中)。简单来说,查询字符串只能发送两个参数(仅限 GET)。
jam
:标识一条唯一数据的参数,几乎可以是任何文本字符串(包括数字)。此值附加到字符串"jam"
以创建动态变量名称。所以?jam=123
导致全局变量jam123
。同样,So?jam=Booboo
导致全局变量jamBooboo
.section
:上面提到的全局变量将被设置的值(必须是数字)。所以如果传了?jam=Booboo§ion=4
,全局变量jamBooboo
的值就设置为4
.
这个想法是,一旦为每个动态命名的 jam
(jamXXXX
) 设置了值,任何指定相同 jam
的未来请求都应该输出设置值。例如,在使用参数 ?jam=Booboo§ion=4
调用页面后指定 ?jam=Booboo
的请求应该简单地输出 "4"
。但是如果下一个请求是?jam=Booboo§ion=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
值。
您需要使用文件、缓存服务或数据库对持久存储进行编程。