我遇到了一个关于 php.ini 中的会话变量和局部变量的非常奇怪的问题。
我试图弄清楚我是否不了解 php 中的会话,或者这是否是我的主机使用的 php 版本的问题。
这是一个非常简单的代码来演示这个奇怪的问题:
session_start();
var_dump($kenny);
var_dump($_SESSION['kenny']);
$_SESSION['kenny']='def';
var_dump($kenny);
var_dump($_SESSION['kenny']);
$kenny = 'abc';
var_dump($kenny);
var_dump($_SESSION['kenny']);
第一次运行代码时,我得到以下结果(正如人们所期望的):
NULL NULL NULL string(3) "def" string(3) "abc" string(3) "def"
我第二次运行它(当然,没有关闭浏览器),我现在明白了!
string(3) "def" string(3) "def" string(3) "def" string(3) "def" string(3) "abc" string(3) "abc"
我运行了第三次、第四次、第五次等等,我明白了!
string(3) "abc" string(3) "abc" string(3) "def" string(3) "def" string(3) "abc" string(3) "abc"
在我看来,会话变量“kenny”和局部变量 $kenny 在多次运行脚本后会成为其中一个的别名。嗯...我真的不认为这就是会话变量和局部变量在 php 中的工作方式。如果我在这里遗漏了什么,请纠正我。
我的虚拟主机正在运行 php 5.2.2。当我在运行 php 5.2.1、5.2.14 和 5.3.1 的其他主机上尝试完全相同的代码时,它们总是给我我所期望的结果:
1st time:
NULL NULL NULL string(3) "def" string(3) "abc" string(3) "def"
此后:
NULL string(3) "def" NULL string(3) "def" string(3) "abc" string(3) "def"
我检查了 php.net 上的更改日志,但没有找到任何可以解决此问题的内容。但就像我提到的,早期版本(5.2.1)工作正常,所以这让我很困惑。
如果有人运行任何其他版本的 php 5.2.x,请尝试一下,如果您看到同样的问题,请告诉我。或者如果有人对这个问题有任何见解,我真的很感激任何反馈。
太感谢了!