【发布时间】:2013-04-27 17:16:57
【问题描述】:
我使用 PHP5.3.8 已经有一段时间了,我刚刚遇到了一个新错误;
警告:未知:您的脚本可能依赖于会话副作用 直到 PHP 4.2.3 才存在。请注意,本次会议 扩展不将全局变量视为数据源, 除非启用了 register_globals。您可以禁用此功能 并通过设置 session.bug_compat_42 或 session.bug_compat_warn 分别关闭。在第 0 行的未知中
这里有解决方案; PHP session side-effect warning with global variables as a source of data.
但是,我仍然不明白为什么会发生这种情况。据我所知,$foo 和 $_SESSION['foo'] 之间应该没有歧义?
我已经尝试在网上测试一些人们说会引发此错误的脚本,但他们不会在我的系统上引发警告,而且我收到此警告的脚本非常复杂,并且将其剥离为了复制错误而只写了几行证明是有问题的。
但是,我已将其缩小到一行;
$bonus = isset($_GET['bonus']) ? $_GET['bonus'] : '';
$_SESSION['bonus'] 在前一页中设置为null,并且 register_globals 自从 PHP4.2 以来就已经关闭,所以不能是 $_GET 范围。
所以这让我回到了我的第一点;为什么$bonus 和$_SESSION['bonus'] 之间突然出现问题?我突然说,因为我在另一个网站(同一个盒子)上使用这个确切的脚本,我没有收到任何错误。
有人能指出我在任何地方可能更详细地解释 PHP 如何处理会话变量等以及为什么这两个变量之间存在问题吗?
谢谢。
[更新]
看这里; PHP Runtime Configuration 确实提到:
[PHP 具有...] 一个未记录的功能/错误,允许您初始化会话变量 在全球范围内...
我想除此之外可能没什么好说的了。在我看来,PHP 在$_SESSION['foo']/$foo 出现问题时,$_SESSION['foo'] != $foo...
【问题讨论】:
-
这个问题对我来说不够清楚。
-
@HermannStephaneNtsamo 问题是;为什么声明与会话变量同名的变量会引发此警告?
标签: php global-variables session-variables