PHP声明全局变量和会话变量

时间:2013-05-03 10:17:49

标签: php global-variables session-variables

我现在使用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'] ...

时,PHP对$foo / $_SESSION['foo'] != $foo有问题似乎很奇怪

1 个答案:

答案 0 :(得分:1)

尝试将session.bug_compat_42设置为关闭,它将关闭警告所涉及的功能。 C.F. http://php.net/manual/en/session.configuration.php