2008-10-06 24 views
42

我试图托管一个给我的PHP网站。我看到这样的警告:以全局变量作为数据源的PHP会话副作用警告

警告:未知:您的脚本可能 依靠其 存在,直到PHP 4.2.3会话副作用。请建议 建议会话扩展 不考虑全局变量作为 数据源,除非 register_globals已启用。您可以通过 将session.bug_compat_42或 分别设置为关闭, 来禁用此功能,并且此 警告。在上线

未知这是什么意思?我如何在代码中追踪这个问题的根源?

回答

98

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

$_SESSION['var1'] = null; 
$var1 = 'something'; 

这将重现此错误。你可以试图找到现有的变量,并通过添加这些行到你的脚本警告你他们停止PHP:

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

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

+0

就像一个魅力!竖起大拇指! – Anunay 2013-07-02 15:44:50

6

似乎有是少数有问题的可能性在这里:

http://www.spiration.co.uk/post/1231/Your-script-possibly-relies-on-a-session-side-effect

说,情况是这样的:

$_SESSION['firstname']=$_REQUEST['firstname']; 

将触发警告。

此外,我解释这个PHP错误内容:http://bugs.php.net/bug.php?id=41540意味着,当您将变量分配给尚未初始化的会话超全局变量时,也可能发生此错误,例如,

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

当您对.htaccess进行更改时,ini_set不起作用。您需要做的是:

php_flag session.bug_compat_42 0 
php_flag session.bug_compat_warn 0 
5

这是找出是什么导致了警告良好的信息,但我会建议不要切断警告欧文提及。这些运行时功能是removed in PHP 5.4.0,开发人员应该尝试避免使用这些变量。

为了解决这个问题,它可能是在开发端的痛苦,但如果你有

$_SESSION["user"] 
$user; 

会议反之亦然一样长重命名为

$_SESSION["sessuser"]; 

或者作为会话名称和变量名称不同。这样想吧:当你升级到最新版本时,无论如何你必须调试你的代码。

1

在我的情况下,改变的php.ini从开到关

这样的:

session.bug_compat_42 = off 
session.bug_compat_warn = off 

如果不工作,重新启动Apache