以全局变量作为数据源的PHP会话副作用警告

以全局变量作为数据源的PHP会话副作用警告,php,session,global-variables,session-variables,Php,Session,Global Variables,Session Variables,我正试图主持一个PHP网站,这是给我的。我看到这个警告: 警告:未知:可能是您的脚本 依赖于会话的副作用 PHP4.2.3之前一直存在。请 建议会议延期 不考虑全局变量 数据来源,除非 已启用寄存器\全局。你可以 禁用此功能和此 设置警告 session.bug_compat_42或 session.bug\u compat\u警告关闭, 分别地在未知在线0 这是什么意思?我如何在代码中找到这个问题的根源?基本上,您有一个与会话同名的变量。例: $_SESSION['var1'] = null;

我正试图主持一个PHP网站,这是给我的。我看到这个警告:

警告:未知:可能是您的脚本 依赖于会话的副作用 PHP4.2.3之前一直存在。请 建议会议延期 不考虑全局变量 数据来源,除非 已启用寄存器\全局。你可以 禁用此功能和此 设置警告 session.bug_compat_42或 session.bug\u compat\u警告关闭, 分别地在未知在线0


这是什么意思?我如何在代码中找到这个问题的根源?

基本上,您有一个与会话同名的变量。例:

$_SESSION['var1'] = null;
$var1 = 'something';
这将重现此错误。通过在脚本中添加以下行,可以阻止PHP尝试查找现有变量并向您发出警告:

ini_set('session.bug_compat_warn', 0);
ini_set('session.bug_compat_42', 0);

这些值也可以在php.ini或.htaccess中设置

这里似乎存在一些问题:

说像这样的情况:

$_SESSION['firstname']=$_REQUEST['firstname'];
将触发警告

此外,我将此php错误内容解释为:当您将变量分配给尚未初始化的会话superglobal时,也可能发生此错误,例如

//Start of script
$_SESSION['bob'] = $bob;

当您对.htaccess ini_集进行更改时,该设置不起作用。您需要按照以下方式进行操作:

php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0

这是一个很好的信息,有助于找出引起警告的原因,但我建议不要关闭欧文提到的警告。这些运行时函数非常有用,开发人员应该避免使用这种变量

要解决这个问题,开发人员可能会感到痛苦,但如果

$_SESSION["user"]
$user;
将会话重命名为

$_SESSION["sessuser"];

或者反之亦然,只要会话名称和变量名称不同。可以这样想:当升级到最新版本时,无论如何都必须调试代码。

在我的情况下,php.ini会从打开变为关闭

像这样:

session.bug_compat_42 = off
session.bug_compat_warn = off

如果不工作,重新启动apache

就像一个魔咒!竖起大拇指!对于不太擅长修改php.ini文件的人来说,上面的格式不是您所使用的格式。一行应该是“session.bug\u compat\u 42=0”,另一行应该是“session.bug\u compat\u warn=0”(无引号)。不过,首先在php.ini文件中进行搜索。很可能两者都已定义为1,您只需切换到0即可