【问题标题】:PHP declaring global and session variablesPHP 声明全局和会话变量
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 嗨,Adder,感谢您提供的链接,我知道如何关闭警告,但我只是在寻找更多关于它发生的确切原因的信息,而不是忽略它。
  • 好吧,当我阅读文档时,如果该功能已打开,您可以分配给全局 $alert 以设置 $_SESSION['alert']。并且session.bug_compat_42 不会关闭它打开该功能的警告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多