我现在使用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']
之间应该没有歧义?
我已经尝试在网上测试一些人们说会抛出这个错误的脚本,但他们不会在我的系统上发出警告,我收到此警告的脚本是hella复杂并剥离它为了复制错误,为了几行而证明是有问题的。
但是,我已将其缩小到一行;
$bonus = isset($_GET['bonus']) ? $_GET['bonus'] : '';
$_SESSION['bonus']
在前一页中被设置为null
,并且自大约PHP4.2以来register_globals已经关闭,因此不能是$ _GET范围。
所以这让我回到了我的第一点;为什么$bonus
和$_SESSION['bonus']
之间突然出现问题?我突然说,因为我在另一个网站上使用这个确切的脚本(同一个框),我没有错误。
有人可以指出我可以更详细地解释PHP如何处理会话变量等以及为什么两个变量之间存在问题的任何地方?
感谢。
[更新
看这里; PHP Runtime Configuration确实提到了:
[PHP有...]一个未记录的功能/错误,允许您初始化会话变量 在全球范围内......
我想除此之外可能还有更多的话要说。在$_SESSION['foo']
...
$foo
/ $_SESSION['foo'] != $foo
有问题似乎很奇怪
答案 0 :(得分:1)
尝试将session.bug_compat_42
设置为关闭,它将关闭警告所涉及的功能。 C.F. http://php.net/manual/en/session.configuration.php