PHP中全局变量覆盖会话变量

4
我发现PHP中存在一种奇怪的行为,看起来像是“反向注册全局变量”。首先尝试执行以下操作:
session_start();
$_SESSION['test'] = NULL;
echo $_SESSION['test'];

这段代码输出为空。然后修改第二行:
session_start();
$test = 1;
echo $_SESSION['test'];

这将输出“1”!

只有当我将$_SESSION['test']设置为NULL时才会发生这种情况!

如果关闭了全局变量注册,则无法发生此情况。

我的托管提供商使用的是PHP 5.2.17。在我的本地5.3.6上不会发生这种情况。

这是一个bug还是有相关的设置?


2
无法在5.3.2上重现;但是有一个警告,“您的脚本可能依赖于PHP 4.2.3之前存在的会话副作用。”...以及对session.bug_compat_42配置标志的引用。你能发布完整的代码吗? - Kerrek SB
无法在5.2.5上重现。http://codepad.org/b02TTy5E - hakre
2
@Robert:请在下面添加您的解决方案(是的,您可以回答自己的问题)。完成后,您可以将其标记为“答案”,这将标记此问题已解决。感谢您的帮助! - hakre
@hakre:我必须等待8个小时才能回答我的问题,现在我还要等2天才能将其标记为答案...这是怎么回事? - Robert
@Robert:这很正常,我认为这只是一些时间限制,以防止过快地自我回答。 - hakre
3个回答

2
问题已解决!
我将php.ini文件从以下内容修改为:
session.bug_compat_42 = On
session.bug_compat_warn = Off

致:

session.bug_compat_42 = Off
session.bug_compat_warn = Off

感谢Kerrek SB!

0
你确定你正在使用 PHP v5.2.17 吗?
请检查。
<?php phpinfo(); ?>

这不应该发生在4.3.0及以后的版本中...


0

2
最好在那里放置 var_dump。仅使用 echo 的代码似乎甚至没有运行。 - zerkms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接