2

我已经使用 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']/ $foowhen $_SESSION['foo'] != $foo...

4

1 回答 1

1

Try setting session.bug_compat_42 to off, it will turn off the functionality the warning is about. c.f. http://php.net/manual/en/session.configuration.php

于 2013-05-03T10:48:18.453 回答