我已经使用 PHP5.3.8 有一段时间了,我刚刚遇到了一个新错误;
警告:未知:您的脚本可能依赖于在 PHP 4.2.3 之前存在的会话副作用。请注意,除非启用了 register_globals,否则会话扩展不会将全局变量视为数据源。您可以通过分别将 session.bug_compat_42 或 session.bug_compat_warn 设置为 off 来禁用此功能和此警告。在第 0 行的未知中
这里有一个解决方案;使用全局变量作为数据源的 PHP 会话副作用警告。
但是,我仍然不明白为什么会这样。据我所知,$foo
和之间应该没有歧义$_SESSION['foo']
?
我已经尝试在网上测试一些人们说会引发此错误的脚本,但他们不会在我的系统上引发警告,而且我收到此警告的脚本非常复杂,并将其简化为几个为了复制错误的行被证明是有问题的。
但是,我已将其缩小到一行;
$bonus = isset($_GET['bonus']) ? $_GET['bonus'] : '';
$_SESSION['bonus']
在上一页中设置为null
,并且 register_globals 自从 PHP4.2 以来一直处于关闭状态,所以不能是 $_GET 范围。
所以这让我回到了我的第一点;$bonus
为什么and之间突然出现问题$_SESSION['bonus']
?我突然说,因为我在另一个站点(同一个盒子)上使用这个确切的脚本,我没有收到任何错误。
有人能指出我在任何地方可能更详细地解释 PHP 如何处理会话变量等以及为什么这两个变量之间存在问题吗?
谢谢。
[更新]
看这里;PHP运行时配置它确实提到:
[PHP 具有...] 一个未记录的功能/错误,允许您在全局范围内初始化会话变量...
我想除此之外可能没什么好说的了。对我来说 PHP 有问题$_SESSION['foo']
/ $foo
when $_SESSION['foo'] != $foo
...